![用反斜杠替换空格/字符](https://linux22.com/image/61944/%E7%94%A8%E5%8F%8D%E6%96%9C%E6%9D%A0%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC%2F%E5%AD%97%E7%AC%A6.png)
我想使用以下命令将一堆 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