繁体   English   中英

在linux中递归运行命令

[英]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/
[...]

并使用zshbash 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM