スペース/文字をバックスラッシュに置き換える[重複]

スペース/文字をバックスラッシュに置き換える[重複]

次のコマンドを使用して複数のmkvをmp4に変換したいと思います。

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

ただし、ファイル名にスペースとハイフンが含まれているため、コマンドは機能しません。 (手動でに切り替えると同じコマンドが機能します。The File - 01.mkvThe\ 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

関連情報