デフォルト名が期待どおりに機能しません。

デフォルト名が期待どおりに機能しません。

ターゲットファイル名から「.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

おすすめ記事