ターゲットファイル名で「.mkv」を非表示にするにはどうすればよいですか?
$ echo a/b.mkv | xargs -I % echo ffmpeg -i "%" $(basename "%" ".mkv").mp4
ffmpeg -i a/b.mkv a/b.mkv.mp4
これは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