递归测试文件夹中的所有flac文件

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个回答

3

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

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

'

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

'

这将很好地完成工作,现在为什么我没想到呢! - farmerdave

2
你可以在运行flac命令时添加--silent/-s参数,这样输出中将不包含版权信息等内容。但请注意,如果文件正常,它也不会显示任何内容,只有当文件出现问题时才会输出信息。保留HTML标签。

谢谢,这是我尝试过的一个选项,但我希望能找到一种介于静默和默认之间的解决方案。 - farmerdave

1

我并没有得到任何荣誉,但我认为我找到了一个命令这里,它似乎完全符合原帖作者的要求,并且比这里提出的其他命令对我更有效。

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

这个命令的一个问题是,在我测试的唯一一次中,它处理文件的顺序似乎是随机的。(但在这里的其他命令中也是如此。)另外,如果有很多文件,我不确定在所有“好”的文件中是否容易发现错误。命令的作者建议添加-w和-s开关以压制除错误以外的所有内容,但这似乎正是原始帖子想要避免的。

0
-R, --recursive  list subdirectories recursively

你可以尝试这个:
for file in 'ls -R *.flac'
do
    flac -t $file
done

flac:无法识别选项“--recursive”,这是-R的输出 - farmerdave
关于这个问题,我后来了解到,“ls”命令实际上是不必要的,并且在这种情况下它并不像bash命令“ls”那样起作用。for循环已经列出了目录中的所有文件,并且循环内部的“echo”调试命令显示$file在第一次迭代时等于“ls”。 - farmerdave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接