如何避免文件名中的空格?

我有一堆文件需要从.mp4转换为.mpeg.one 。 我的一个朋友向我建议了这个简单的剧本。 但是它不起作用,因为文件名包含空格。

这是脚本:

 for f in $(ls *.mp4); do ffmpeg -i "$f".mp4 "$f".mprg; done 

在这种情况下,您不需要使用ls 。 作为一般规则,总是尝试使用shell builtins和globfunction,而不是依赖外部程序(例如ls ),这些程序可能会带来丑陋的变通方法的问题。

此外,您不应该“手动”将扩展名附加到输入文件名(您给-i ),并且应该在输出文件上删除扩展名。

所以命令应该是:

 for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}".mprg; done 

您可以使用find -print0xargs -0代替ls

 find -name '*.mp4' -print0 | xargs -0 -n1 ffmpeg -i '{}' '{}'.mpeg 

随后重命名后:

 rename s/mp4.mpeg$/mpeg/ *.mp4.mpeg 
  • 不需要
  • 您可能.mpeg视为扩展名
  • 如果你放置"正确,空间将不会是问题
  • ffmpeg -i "$f".mp4将查找例如files.mp4.mp4,你可能并不是这个意思
  • 请注意,您的输出文件将命名为files.mp4.mpeg

可能的方法:

 for f in *.mp4; do ffmpeg -i "$f" "$f".mpeg; done