ターミナルの動的出力をテキストファイルに書き込む

ターミナルの動的出力をテキストファイルに書き込む

dynamic output結局のところ、ターミナルの (後で説明します) 内容をテキスト ファイルに保存できることが目的ですが、私が最終的に求めているのは次のことです。

ターミナル用のカスタム コマンドを作成しました。playRandomこのコマンドは、ランダムな曲を永遠に再生します。このために作成した bash ファイルは次のとおりです。

#!/bin/bash 
find ./ -type f | sort -R | xargs -I + play +

注:playコマンドはソックスソフトウェア。

出力は次のようになります。

playRandom コマンド

ご覧のとおり、出力が変更されているため、出力を保存することdynamicallyはできません。>>

「再生された曲名」をテキストファイルに保存できるようにしたいです。

この目標を達成するにはどうすればいいでしょうか?よろしくお願いします。

答え1

現在再生中のファイル名を保存する

コマンドは 1 つのファイルを再生した後に終了するため、複数のファイルを使用および指定するplay代わりに、各ファイルを 1 つずつ取り出してファイルにエコーし、後でファイルを再生することができます。編集したスクリプトは以下のようになります。ファイル名を安全に処理するための追加のオプションとコマンドが追加されていることに注意してください。xargsplayIFS= read -d'' -r

#!/bin/bash 

# create file for playing songs first
echo > playlist.txt

# Now play each song and echo filename to file
find ./ -type f -print0 | sort -z -R | while IFS= read -d '' -r filename
do
    clear
    echo "$filename" >> playlist.txt
    play "$filename"
done

この方法の利点は、ファイル名が再生されると playlist.txt に記録されるため、 などを使用してスクリプトの出力をリアルタイムで追跡できることですtail -F playlist.txt

注記:の出力playlist.txtにリストされないようにするには、次のようにコマンドを変更します。findfind

find ./ -type f -not -name "playlist.txt" -print0

さらに、ファイルのみがリストされていることを確認したい場合は、.mp3次のようにします。

find ./ -type f \( -not -name "playlist.txt" -and -name "*.mp3" \) -print0

再生可能なファイルのリストを保存しています

ファイルリストを安全に保管することが目的の場合前に再生されるので、それほど科学的なことは何もありません。検索ソートパイプラインは最初にファイルに書き込まれ、そのファイルは構造をplay介してxargs、または再びwhile IFS= read -r ; do ... done構造を介して供給されます。

#!/bin/bash 

find ./ -type f -print0 | sort -z -R > playlist.txt

while IFS= read -d '' -r filename
do
    clear
    play "$filename"
done < playlist.txt

答え2

find ./ -type f | sort -R | tee text.file | xargs -I + play +  

も参照してくださいman tee

答え3

これが私の解決策です:

1. リアルタイム(現在再生中)

コマンドを実行した後、playこれを使用します:

soxi "$(readlink /proc/`pidof play`/fd/3)" | grep -Po "(?<=Title=).*"

現在再生中の曲の名前を返し、 を使用してファイルにリダイレクトすることができます>

1.1. 注記

/proc/`pidof play`/fd/3
  • 現在再生中のトラック (ファイル) のファイル記述子です。
  • readlinkファイル名を取得する
  • soxi情報を取得する
  • grepトラックタイトルをカットして

2. プレイする前に(名前をすべてリストアップする)

find ./ -type f | sort -R | tee /tmp/play-files | xargs -I + soxi "+"\
| grep -Po "(?<=Title=).*" > list_of_names && xargs < /tmp/play-files\
-I + play "+"

list_of_names現在のディレクトリに、すべてのトラック名を含む という名前のファイルが作成されます。

関連情報