如何在 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

相关内容