如何避免文件名中出现空格?

如何避免文件名中出现空格?

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

脚本如下:

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

答案1

在这种情况下,您不需要使用ls。作为一般规则,请始终尝试使用 shell 内置函数和 glob 功能,而不是依赖外部程序(例如ls),因为外部程序可能会引入丑陋的解决方法问题。

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

因此命令应该是:

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

答案2

ls您可以使用find -print0和来代替xargs -0

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

随后进行重命名:

rename s/mp4.mpeg$/mpeg/ *.mp4.mpeg

答案3

  • 不需要ls
  • 你可能是.mpeg指扩展
  • 如果你放置"正确,空格就不会成为问题
  • ffmpeg -i "$f".mp4在你的命令中会寻找例如 files.mp4.mp4,这可能不是你的本意
  • 请注意,您的输出文件将被命名为 files.mp4.mpeg

可能的解决方案:

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

相关内容