ターゲットファイル名から「.mkv」を消す方法は?
$ echo a/b.mkv | xargs -I % echo ffmpeg -i "%" $(basename "%" ".mkv").mp4
ffmpeg -i a/b.mkv a/b.mkv.mp4
ベストアンサー1
あまりにも早く実行するのではなく、あまりにも早く実行することbasename
です。basename "%" ".txt"
努力する:
echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(basename "%" ".mkv").mp4'
主な目的basename
は、ディレクトリ部分を削除することです。 GNU basename(1) のマニュアルページには、「ファイル名からディレクトリとサフィックスを削除してください」と記載されているので、期待どおりに機能します。ディレクトリ部分を保持するには、次のようにします。
echo a/b.mkv | xargs -I % sh -c 'echo ffmpeg -i "%" $(dirname "%")/$(basename "%" ".mkv").mp4'
たとえば、次のような他のソリューションがありますsed
。
$ echo a/b.mkv | sed 's/\.mkv$/.mp4/'
a/b.mp4