[英]Running command recursively in linux
我正在尝试提出一个命令,在每个子文件夹中运行mp3gain FOLDER/SUBFOLDER/*.mp3
,但我无法理解为什么这个命令不起作用:
find . -type d -exec mp3gain \"{}\"/*.mp3 \;
运行时,我收到错误Can't open "./FOLDER/SUBFOLDER"/*.mp3 for reading
每个文件夹和子文件夹。
如果我用mp3gain "./FOLDER/SUBFOLDER"/*.mp3
手动运行命令mp3gain "./FOLDER/SUBFOLDER"/*.mp3
它可以工作。 出了什么问题?
如果你有像这样的固定数据结构
folder1/subfolder1/
folder1/subfolder2/
folder2/subfolder1/
[...]
并使用zsh
或bash version >=4.0
你可以试试
mp3gain **/*.mp3
但要确保检查输出
ls **/*.mp3
在你认真对待mp3gain之前。
当您从shell运行mp3gain "./FOLDER/SUBFOLDER"/*.mp3
*.mp3
, *.mp3
会在传递给mp3gain
之前被shell扩展。 当find
运行它时,没有涉及shell, *.mp3
正在逐字传递给mp3gain
。 后者不知道如何处理通配符(因为通常它不需要)。
嗯。 刚试过这个来测试如何通过用echo
替换mp3gain
来解析目录,它可以工作:
find . -type d -exec echo {}\/\*.mp3 \;
尝试运行您的命令版本,但使用echo
查看自己的文件输出:
find . -type d -exec echo \"{}\"/*.mp3 \;
似乎引号会妨碍您的原始命令。
这工作......
find /music -name *mp3 -exec mp3gain -r -k {} \;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.