web-dev-qa-db-ja.com

xargs --max-proc 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が口当たりの良い場合は、各呼び出しを異なるログに出力できるようにしたいと思います。それ以外の場合、それぞれのstdoutは同じであり、ログが乱雑になります。

4
Gregg Lind

GNU Parallel 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

1
Ole Tange

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

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

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

1
James

起動時に乱数/テキストを選択し、各行の前にこの番号を付けるようにスクリプトを変更できますか?その後、grepを使用して分割できます。

0
Rory