如何避免文件名中的空格?
我有一堆文件需要从.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 -print0
和xargs -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