xargs --max-proc разделить вывод по процедурам?

xargs --max-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это многословно, то я хотел бы иметь возможность выводить каждый вызов в отдельный журнал. В противном случае stdout для каждого будет одинаковым, и журналы будут перемешаны.

решение1

Это можно сделать, запустив команду 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.

Связанный контент