最近、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は同じであり、ログが乱雑になります。
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
これを行うには、シェルを介してxargsコマンドを実行します。これにより、出力をリダイレクトできます。次のようになります。
find blah -type f | xargs -I{} -P 4 -n 1 sh -c 'yourcommand --input {} > {}.output'
...おそらく少し調整する必要があります-xargsは{}を作業中のアイテム/ファイルに置き換えます
起動時に乱数/テキストを選択し、各行の前にこの番号を付けるようにスクリプトを変更できますか?その後、grepを使用して分割できます。