3

我试图想出一个可以mp3gain FOLDER/SUBFOLDER/*.mp3在每个子文件夹中运行的命令,但我无法理解为什么这个命令不起作用:

find . -type d -exec mp3gain \"{}\"/*.mp3 \;

运行时,每个文件夹和子文件夹都会出错Can't open "./FOLDER/SUBFOLDER"/*.mp3 for reading

如果我手动运行命令,mp3gain "./FOLDER/SUBFOLDER"/*.mp3它可以工作。怎么了?

4

4 回答 4

3

如果你有一个固定的数据结构,比如

folder1/subfolder1/
folder1/subfolder2/
folder2/subfolder1/
[...]

并使用zsh,或者bash version >=4.0您可以尝试

mp3gain **/*.mp3

但要确保检查输出

ls **/*.mp3 

在您认真对待 mp3gain 之前。

于 2013-01-26T11:13:39.680 回答
1

当您mp3gain "./FOLDER/SUBFOLDER"/*.mp3从 shell 运行时,*.mp3在传递给mp3gain. 运行它时find,不涉及任何 shell,并且按*.mp3字面意思传递给mp3gain. 后者不知道如何处理通配符(因为通常它不需要)。

于 2013-01-26T09:25:29.907 回答
0

嗯。刚刚尝试了这个来测试如何通过替换来解析目录mp3gain并且echo它可以工作:

find . -type d -exec echo {}\/\*.mp3 \;

尝试运行您的命令版本,但echo要自己查看文件输出:

find . -type d -exec echo \"{}\"/*.mp3 \;

似乎引号妨碍了您的原始命令。

于 2013-01-26T09:25:41.640 回答
0

这行得通...

find /music -name *mp3 -exec mp3gain -r -k {} \;
于 2013-12-15T22:24:49.693 回答