xargs --max-proc 按 proc 分割输出?

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是多嘴的,那么我希望能够让每次调用都打印到不同的日志中。否则每次调用的标准输出都相同,日志就会变得混乱。

答案1

您可以通过 shell 运行 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 对其进行拆分。

相关内容