bash – 通过目录递归并转换音乐
发布时间:2020-12-16 01:47:17 所属栏目:安全 来源:网络整理
导读:我正在编写一个快速脚本来浏览大量音乐,将所有m4as转换为mp3.他们中的大多数已经是mp3,但我希望所有这些都是mp3.这是我到目前为止所拥有的: for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done 它是否在一个层面上,如何
我正在编写一个快速脚本来浏览大量音乐,将所有m4as转换为mp3.他们中的大多数已经是mp3,但我希望所有这些都是mp3.这是我到目前为止所拥有的:
for f in *.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done 它是否在一个层面上,如何将此ffmpeg集成到find命令中以递归方式执行? 谢谢您的帮助! 解决方法
如果你想在子文件夹中循环,你可以使用globstar shell可选行为,请参见
Pattern Matching section of the reference manual和
Shopt Builtin section of the reference manual:
shopt -s globstar for f in **/*.m4a; do ffmpeg -i "$f" -acodec libmp3lame -ab 320 "${f%.m4a}.mp3"; done 使用发现它有点棘手,因为你使用的是Shell Parameter Expansion.对于名字中带有空格或其他有趣符号的文件,这种可能性是100%安全的: find . -name '*.m4a' -type f -exec bash -c 'ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3"' {} ; 如果你有大量的文件,第二种可能性可能会更快,因为已知bash globbing对于大量文件来说非常慢. 在find的-exec语句中,我正在使用bash -c’…’.在这种情况下,在要执行的字符串之后给出的每个参数都将被设置为位置参数,从0开始索引,因此代码中出现的$0 ffmpeg -i "$0" -acodec libmp3lame -ab 320 "${0%.m4a}.mp3" 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |