以前に作業していたファイルを削除しようとしていますが、許可されません。助けてください。これが私が実行するコマンドです:
find . -type f -name '*.flac' -print0 |
xargs -0i ffmpeg -i {} -acodec libmp3lame -ab 320k "{}.mp3" |
rm -rf {}
GNU Parallelがインストールされている場合は、次のことができます。
find . -type f -name '*.flac' | parallel ffmpeg -i {} -acodec libmp3lame -ab 320k {.}.mp3 '&&' rm {}
CPUコアごとに1つのffmpegプロセスを実行します。
詳細については、紹介ビデオをご覧ください:http: //pi.dk/1
ffmpeg
呼び出しの出力をコマンドにパイプしますrm
。ffmpeg
興味深い出力を生成せず、入力を読み取らないためrm
、これは何もしません。
あなたが何をしようとしているのかわかりません。処理後にflacファイルを削除したいと思います。いくつかの選択肢があります。最初にすべてのffmpegファイルを変換してから、それらをすべて削除することができます。または、処理後に各ファイルを削除できます。後者をお勧めします。そうしないと、変換が成功した場合にのみflacファイルを削除することが困難になります。
を使用するよりも、ここxargs
で使用する方が簡単find … -exec
です。flacファイルごとに、を呼び出しffmpeg
、ffmpegが成功した場合はファイルを削除します。-delete
検索にアクションがない場合は、-exec rm {} \;
代わりに使用してください。中間シェルを使用して、出力ファイル名を作成します。
find . -type f -name '*.flac' \
-exec sh -c 'ffmpeg -i "$0" -acodec libmp3lame -ab 320k "${0%.*}.mp3"' {} \; \
-delete
rm
代わりに、シェルスニペット内でコマンドを使用できます。
find . -type f -name '*.flac' \
-exec sh -c 'ffmpeg -i "$0" -acodec libmp3lame -ab 320k "${0%.*}.mp3" && rm "$0"' {} \;
の一部のバージョンではfind
、出力ファイルを呼び出すfoo.flac.mp3
場合は、中間シェルをスキップできます。
find . -type f -name '*.flac' \
-exec ffmpeg -i {} -acodec libmp3lame -ab 320k {}.mp3 \; \
-delete
このコマンドrm
は標準入力から入力を受け取らないため、次の場合とxargs
同じように入力を送信する必要があります。ffmpeg
これを試して:
find . -type f -name '*.flac' -print0 |
xargs -0i bash -c 'ffmpeg -i {} -acodec libmp3lame -ab 320k \"{}.mp3" ; rm -rf {}'
rm
これにより、コマンドの実行に追加されxargs
、基本的にを使用してインラインシェルスクリプトが作成されbash -c
ます。
まず第一に、「それは私を許さない」は問題を説明するための最良の方法ではありません。エラーメッセージを投稿するか、何が起こるかを説明する必要があります。
第二に、私はあなたが達成しようとしていることを完全には理解していませんが、あなたはで使用rm
していませんxargs
、あなたはただ何かをにパイプしrm
ます。それはどのようにrm
機能するかではありません。
find . -type f -name '*.flac' -print0 | xargs -0i rm "{}"
たとえば、おそらく機能します。とにかくファイルを探すだけrm -r
なので、ここでは使用していません。find