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

3 ответа

GNU Parallel 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

Вы можете сделать это, выполнив команду xargs через оболочку - это позволит вам перенаправить вывод - что-то вроде этого:

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

... вам, вероятно, придется немного его подправить - xargs заменяет {} на элемент / файл, над которым он работает

Вы можете изменить ваш скрипт так, чтобы при запуске он выбирал случайное число / текст, а затем префикс каждой строки с этим номером? Затем вы можете позже разделить его с помощью grep.

Другие вопросы по тегам