用反斜杠替换空格/字符

用反斜杠替换空格/字符

我想使用以下命令将一堆 mkv 转换为 mp4:

for i in $(ls *mkv); do ffmpeg -i $i -vcodec copy -acodec copy $i.mp4; done;

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

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

答案1

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

for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i}.mp4"; done

什么时候需要双引号?有关引用的详细解释。

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

for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i%%.mkv}.mp4"; done

相关内容