xargs --max-proc は出力をプロセスごとに分割しますか?

xargs --max-proc は出力をプロセスごとに分割しますか?

私は最近このxargs --max-procs機能を発見しました。

コマンドの出力を proc ごとに分割するにはどうすればよいでしょうか? を作成するだけでよいのでしょうか mycommand --logfile $LOGFILE、それとも xargs 自体から実行できますか?

例(womble の場合):

スクリプト myprocessor.sh とファイルのリストがあるとします。順序は任意ですが、それぞれのログを別々に記録したい場合は、次のようになります。

find $MY_FILE_TREE --print0 | xargs --null --max-procs 3 --max-args 1 --no-run-if-empty myprocess.sh  

実行したい並列ジョブかもしれません。myprocessor.shが長すぎる場合は、呼び出しごとに異なるログに出力できるようにしたいと思います。 そうしないと、それぞれの標準出力が同じになり、ログがごちゃごちゃになってしまいます。

答え1

これは、シェルを介して xargs コマンドを実行することで実行できます。これにより、出力をリダイレクトできるようになります。次のようになります。

find blah -type f | xargs -I{} -P 4 -n 1 sh -c 'yourcommand --input {} > {}.output'

...おそらく少し調整する必要があるでしょう - xargsは{}を作業中のアイテム/ファイルに置き換えます

答え2

GNU パラレルhttp://www.gnu.org/software/parallel/プロセスからの標準出力を自動的に正しく結合するので、これはあなたのために作られたようです。

find $MY_FILE_TREE --print0 | parallel --null --max-procs 3 --max-args 1 --no-run-if-empty myprocess.sh ">" {}.output

または短く:

find $MY_FILE_TREE --print0 | parallel -0 -j3 -r myprocess.sh ">" {}.output

紹介ビデオを見る:http://www.youtube.com/watch?v=OpaiGYxkSuQ

答え3

起動時にランダムな数字/テキストを選択し、各行の先頭にこの数字を付けるスクリプトを変更することはできますか? その後、grep を使用して分割できます。

関連情報