bash%をxargs%と組み合わせる

bash%をxargs%と組み合わせる

この記事%構文を使用してファイル拡張子を削除できると言います。

$ s=a/b.mkv
$ echo ${s%.*}
a/b

行セットの目的の結果を得るために、構文を%inとどのように%組み合わせることができますか?xargs

$ cat | xargs -I % echo ffmpeg -i % (INSERT MAGIC HERE)
a/b.mkv
ffmpeg -i a/b.mkv a/b.mp4
c/d.mkv
ffmpeg -i c/d.mkv c/d.mp4

答え1

与えられたコメントに基づいて短くて良い解決策を見つけました。

find . -name '*.mkv' | while read f; do echo ffmpeg -i "$f" "${f%.*}.mp4"; done

答え2

zsh以前の答えに基づいてこれがシェルの場合は、次のものを使用することもできます。

for i in **/*.mkv; echo ffmpeg -i $i $i:r.mp4

それ以外の場合:

zsh -c 'for i in **/*.mkv; echo ffmpeg -i $i $i:r.mp4'

これにより、ファイル名の空白の問題を回避できます。

関連情報