xargs --max-proc ¿salida dividida por proceso?

xargs --max-proc ¿salida dividida por proceso?

Recientemente descubrí la xargs --max-procsfunción.

¿Cómo se puede dividir la salida del comando por proc? ¿Debo simplemente crear un archivo mycommand --logfile $LOGFILEo puedo hacerlo desde el propio xargs?

Un ejemplo (para womble):

Supongamos que tengo el script myprocessor.sh y una lista de archivos. Pueden ir en cualquier orden, pero quiero mantener el registro de cada uno por separado, luego:

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

podría ser el trabajo paralelo que quiero ejecutar. Si myprocessor.shes hablador, entonces me gustaría poder imprimir cada invocación en un registro diferente. De lo contrario, la salida estándar para cada uno es la misma y los registros se confunden.

Respuesta1

Puedes hacer esto ejecutando tu comando xargs a través de un shell; esto te permitirá redirigir la salida, algo como esto:

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

...probablemente tendrás que modificarlo un poco: xargs reemplaza {} con el elemento/archivo en el que está trabajando

Respuesta2

Paralelo GNUhttp://www.gnu.org/software/parallel/parece estar hecho para usted, porque combina automáticamente y correctamente el resultado estándar de los procesos.

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

o más corto:

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

Mira el vídeo de introducción:http://www.youtube.com/watch?v=OpaiGYxkSuQ

Respuesta3

¿Podría cambiar su secuencia de comandos para que al inicio elija un número/texto aleatorio y luego anteponga cada línea con este número? Luego podrás dividirlo usando grep.

información relacionada