xargs - saída de divisão max-proc por proc?

4

Eu descobri recentemente o recurso xargs --max-procs .

Como pode dividir a saída do comando por proc? Devo apenas criar um mycommand --logfile $LOGFILE ou posso fazê-lo a partir do próprio xargs?

Um exemplo (para womble):

Suponha que eu tenha o script myprocessor.sh e uma lista de arquivos. Eles podem ir em qualquer ordem, mas eu quero manter o registro para cada separado, então:

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

pode ser o trabalho paralelo que quero executar. Se myprocessor.sh for boquiaberto, gostaria de poder imprimir cada invocação para um log diferente. Caso contrário, o stdout de cada um é o mesmo, e os logs ficam confusos.

    
por Gregg Lind 20.01.2010 / 00:57

3 respostas

1

Você pode fazer isso executando o comando xargs através de um shell - isso permitirá redirecionar a saída - algo assim:

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

... você provavelmente terá que ajustar um pouco - xargs substitui {} pelo item / arquivo em que está trabalhando

    
por 20.01.2010 / 01:40
1
O link parece ser feito para você, porque combina automaticamente a saída padrão dos processos corretamente.

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

ou menor:

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

Assista ao vídeo de introdução: link

    
por 22.06.2010 / 12:51
0

Você pode alterar seu script para que, na inicialização, ele escolha um número / texto aleatório e prefixe cada linha com esse número? Então você pode depois dividi-lo usando grep.

    
por 25.01.2010 / 17:15

Tags