
최근에 그 기능을 발견했습니다 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
각 호출을 다른 로그에 인쇄할 수 있기를 바랍니다. 그렇지 않으면 각각의 표준 출력이 동일하고 로그가 뒤죽박죽됩니다.
답변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
답변3
시작할 때 임의의 숫자/텍스트를 선택한 다음 각 줄에 이 숫자를 접두어로 붙이도록 스크립트를 변경할 수 있습니까? 그런 다음 나중에 grep을 사용하여 분할할 수 있습니다.