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.