用反斜杠替换空格/字符

0 command-line shell quoting

我想使用以下命令将一堆 mkvs 转换为 mp4s:

for i in $(ls *mkv); do ffmpeg -i $i -vcodec copy -acodec copy $i.mp4; done;
Run Code Online (Sandbox Code Playgroud)

但是,文件名中包含空格和连字符,因此该命令无法正常工作。(当我手动替换The File - 01.mkvThe\ File\ \-\ 01.mkv,相同的命令作品)。

让它发挥作用的最佳方法是什么?

Ste*_*itt 8

您需要引用变量并避免命令替换:

for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i}.mp4"; done
Run Code Online (Sandbox Code Playgroud)

请参阅何时需要双引号?有关引用的详细说明。

当我在做的时候,上面会生成带有.mkv.mp4扩展名的文件;解决这个问题:

for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i%%.mkv}.mp4"; done
Run Code Online (Sandbox Code Playgroud)

  • 或者使用没有所有这些错误功能的 `zsh`:`for i (./*.mkv) ffmpeg -i $i -vcodec copy -acodec copy $i:r.mp4` (2认同)

归档时间:

查看次数:

1416 次

最近记录:

10 年,8 月 前