Bashループでプロセスコマンドの出力を使用するには?

Bashループでプロセスコマンドの出力を使用するには?

ディレクトリ内の複数のメディアファイルの形式情報を取得しようとしています。私のスクリプトは各ファイルを見て、そのフォーマット(メディアファイルの場合)を参照して終了します。

私が本当に望むのは、出力が特定の値と一致する場合は、特定のコマンドを実行することです。これは私のコードです。

for file in ./*
do
    ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file" 
done

以下は、10個のファイルと1つのディレクトリを含むフォルダで実行したときに得られる出力例です。

vorbis
aac
opus
vorbis
mp3
opus
mp3
./file1.txt: Invalid data found when processing input
./Soundcloud: Is a directory
mp3
./media_bash_file.sh: Invalid data found when processing input

理想的に私がやりたいことは、ffprobeコマンドが実行されたら行きたいことです。

if ffprobe_output = "vorbis" then run x command ELSE ...

など。使用について述べたさまざまなブログ投稿を試してみました。

var=$(insert_ffprobe_command_here) 

バッチファイルの先頭にありますが、うまく動作しないようです。通常、次のエラーが発生します。

"Argument './Mediafile_X' provided as input filename, but './Mediafile_Y' was already specified.

私が書いた最初のコードスニペットだけを得ました。

ベストアンサー1

for file in ./*
do
    output=$(ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$file")
    if [ "$output" = "vorbis" ];then ......
    else ....
    fi
done

おすすめ記事