4

我希望有一个命令或脚本来对文件夹及其子文件夹中的所有 flac 文件执行 flac 的测试功能。(即 $ flac -t music_file.flac)

我试过使用

find . -name "*.flac" -exec flac -t '{}' \;

它可以工作,但是 flac 测试功能还在测试每个文件之前写入版权/保修输出,因此很难清楚地看到“ok”的结果。

我也尝试过使用

for file in 'ls *.flac'
do
  flac -t $file
done

它工作得更整洁(最初只写一次保修/版权声明),但不会递归地作用于子文件夹。

我可以请求一些帮助来改善这一点吗?

4

4 回答 4

2

您可以传递--silent/-sflac,它不会在输出中包含版权信息等。但是请注意,当文件正常时它也不会显示任何内容,只有在文件正常时才输出。

于 2013-11-11T04:14:11.760 回答
2

我不确定这是否是最优雅的解决方案,但您可以将原始命令与 grep 一起使用来排除您不想要的位。因此,如果您想要已测试的文件列表以及状态,您可以搜索:

find -name "*.flac" -exec flac -t '{}' \; |& grep "\.flac"

'&' 很重要,因为 flac 似乎将大多数内容输出到 stderr。

于 2013-11-12T01:20:14.790 回答
0
-R, --recursive  list subdirectories recursively

你可以试试这个:

for file in 'ls -R *.flac'
do
    flac -t $file
done
于 2013-11-11T05:00:56.900 回答
0

我对此不以为然,但我想我在这里找到了一个命令,它似乎完全符合原始海报的要求,并且比这里提出的更适合我。

find -type f -iname '*.flac' -print0 | xargs --null flac -t

这个命令的一个小问题是,在我迄今为止测试过的一个实例中,它以看似随机的顺序处理文件。(但这里的命令也是如此。)另外,如果有很多文件,我不确定是否很容易在所有好的文件中发现错误。该命令的作者建议添加 -w 和 -s 开关来抑制除错误之外的所有内容,但这似乎正是原始发布者想要摆脱的。

于 2018-08-09T07:16:09.747 回答