我正在尝试在每个子文件夹中运行mp3gain FOLDER/SUBFOLDER/*.mp3
的命令,但我无法理解为什么此命令不起作用:
find . -type d -exec mp3gain \"{}\"/*.mp3 \;
运行时,我会为每个文件夹和子文件夹收到错误Can't open "./FOLDER/SUBFOLDER"/*.mp3 for reading
。
如果我使用mp3gain "./FOLDER/SUBFOLDER"/*.mp3
手动运行命令,则可以正常运行。出了什么问题?
答案 0 :(得分:3)
如果您有像
这样的固定数据结构folder1/subfolder1/
folder1/subfolder2/
folder2/subfolder1/
[...]
并使用zsh
或bash version >=4.0
您可以尝试
mp3gain **/*.mp3
但要确保检查
的输出ls **/*.mp3
在你认真对待mp3gain之前。
答案 1 :(得分:1)
当您从shell运行mp3gain "./FOLDER/SUBFOLDER"/*.mp3
时,*.mp3
会被shell扩展,然后传递给mp3gain
。当find
运行它时,没有涉及shell,而*.mp3
正逐字传递给mp3gain
。后者不知道如何处理通配符(因为通常它不需要)。
答案 2 :(得分:0)
嗯。试过这个来测试如何通过用mp3gain
替换echo
来解析目录,并且它可以工作:
find . -type d -exec echo {}\/\*.mp3 \;
尝试运行您的命令版本,但使用echo
来查看自己的文件输出:
find . -type d -exec echo \"{}\"/*.mp3 \;
似乎引号会妨碍原始命令。
答案 3 :(得分:0)
这有效......
find /music -name *mp3 -exec mp3gain -r -k {} \;