我是Bash的新手,正在尝试做一些表面上看起来很简单的事情-在目录层次结构上运行find以获取所有* .wma文件,将输出管道传输到命令,然后将它们转换为mp3并将转换后的文件另存为.mp3。我的想法是该命令应如下所示(我不再使用音频转换命令,而是使用echo作为示例):
$ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3
据我了解,-print0 arg将允许我处理具有空格的文件名(其中许多文件是音乐文件)。然后,我期待(由于xargs的原因)find中的每个文件路径都在f中捕获,并且使用子字符串match / delete从字符串末尾开始,我应该用mp3回显原始文件路径扩展名而不是wma。但是,我看到的不是这个结果,而是:
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
*.mp3
...
所以我的问题(除了特定的“我在这里做错了什么”之外)是吗?在字符串操作操作中,是否需要对管道操作结果所产生的值与变量赋值所导致的值进行不同的处理? ?
{}
成员)进行字符串操作
xargs
比情况更合适exec
。有关示例,请参见此stackpost stackoverflow.com/questions/896808/find-exec-cmd-vs-xargs。
xargs
用find
。它带有一个-exec
选项。您可以仅将要使用的命令添加到问题中,然后有人可以向您显示正确的find
命令吗?