dynamic output
結局のところ、ターミナルの (後で説明します) 内容をテキスト ファイルに保存できることが目的ですが、私が最終的に求めているのは次のことです。
ターミナル用のカスタム コマンドを作成しました。playRandom
このコマンドは、ランダムな曲を永遠に再生します。このために作成した bash ファイルは次のとおりです。
#!/bin/bash
find ./ -type f | sort -R | xargs -I + play +
注:play
コマンドはソックスソフトウェア。
出力は次のようになります。
ご覧のとおり、出力が変更されているため、出力を保存することdynamically
はできません。>>
「再生された曲名」をテキストファイルに保存できるようにしたいです。
この目標を達成するにはどうすればいいでしょうか?よろしくお願いします。
答え1
現在再生中のファイル名を保存する
コマンドは 1 つのファイルを再生した後に終了するため、複数のファイルを使用および指定するplay
代わりに、各ファイルを 1 つずつ取り出してファイルにエコーし、後でファイルを再生することができます。編集したスクリプトは以下のようになります。ファイル名を安全に処理するための追加のオプションとコマンドが追加されていることに注意してください。xargs
play
IFS= 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
にリストされないようにするには、次のようにコマンドを変更します。find
find
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
現在のディレクトリに、すべてのトラック名を含む という名前のファイルが作成されます。