我最近发现了xargs --max-procs特性。
如何可以通过proc分割命令的输出? 我应该只是创build一个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很拗口,那么我希望能够将每个调用打印到不同的日志。 否则,每个标准输出都是一样的,日志会混乱。
你可以通过运行你的xargs命令通过一个shell来实现 – 这可以让你redirect输出 – 就像这样:
find blah -type f | xargs -I{} -P 4 -n 1 sh -c 'yourcommand --input {} > {}.output'
…您可能需要稍微调整一下–xargs用正在处理的项目/文件replace{}
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
观看介绍video: http : //www.youtube.com/watch?v = OpaiGYxkSuQ
你可以改变你的脚本,以便在启动时它会select一个随机数字/文本,然后在每行前加上这个数字? 然后你可以稍后使用grep分割它。