2

以前に作業していたファイルを削除しようとしていますが、許可されません。助けてください。これが私が実行するコマンドです:

find . -type f -name '*.flac' -print0 |
  xargs -0i ffmpeg -i {} -acodec libmp3lame -ab 320k "{}.mp3" |
  rm -rf {}
4

4 に答える 4

3

GNU Parallelがインストールされている場合は、次のことができます。

find . -type f -name '*.flac' | parallel ffmpeg -i {} -acodec libmp3lame -ab 320k {.}.mp3 '&&' rm {}

CPUコアごとに1つのffmpegプロセスを実行します。

詳細については、紹介ビデオをご覧ください:http: //pi.dk/1

于 2012-07-26T00:46:27.190 に答える
2

ffmpeg呼び出しの出力をコマンドにパイプしますrmffmpeg興味深い出力を生成せず、入力を読み取らないため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
于 2012-07-20T10:01:33.360 に答える
0

このコマンド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ます。

于 2012-07-20T09:58:18.287 に答える
0

まず第一に、「それは私を許さない」は問題を説明するための最良の方法ではありません。エラーメッセージを投稿するか、何が起こるかを説明する必要があります。

第二に、私はあなたが達成しようとしていることを完全には理解していませんが、あなたはで使用rmしていませんxargs、あなたはただ何かをにパイプしrmます。それはどのようにrm機能するかではありません。

find . -type f -name '*.flac' -print0 | xargs -0i rm "{}"

たとえば、おそらく機能します。とにかくファイルを探すだけrm -rなので、ここでは使用していません。find

于 2012-07-20T09:59:00.803 に答える