xargs로 진행 상황 추적


11

xargs를 사용하여 다음과 같은 입력 매개 변수 집합에서 명령을 실행하고 있습니다.

cat <someinput> | xargs -n 1 -P 5 <somecmd>

입력 파일이 실제로 길고 실행하는 데 시간이 오래 걸립니다. 명령 프롬프트가 표시되기를 기다리고 있습니다. 완료된 입력 인수 수에 대한 진행률 표시 줄을 표시하는 방법이 있습니까?

'bar'를 사용해 보았지만 항상 '무한한'처리량을 얻었습니다. xargs가 명령을 실행하기 전에 전체 입력을 읽는 것처럼 보입니다.

http://i.stack.imgur.com/5Wsgx.gif

답변:


13

GNU Parallel이 있다면 다음을 실행할 수 있습니다.

cat <someinput> | parallel --bar -P 5 <somecmd>

GNU Parallel은 일반적인 병렬 처리기이므로 동일한 컴퓨터 또는 ssh 액세스 권한이있는 여러 컴퓨터에서 작업을 병렬로 쉽게 실행할 수 있습니다.

4 개의 CPU에서 32 개의 서로 다른 작업을 실행하려는 경우 병렬화하는 간단한 방법은 각 CPU에서 8 개의 작업을 실행하는 것입니다.

간단한 예약

대신 GNU Parallel은 프로세스가 완료되면 새로운 프로세스를 생성하여 CPU를 활성화하여 시간을 절약합니다.

GNU 병렬 스케줄링

설치

개인 설치에는 루트 액세스가 필요하지 않습니다. 다음을 수행하여 10 초 안에 완료 할 수 있습니다.

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

다른 설치 옵션은 http://git.savannah.gnu.org/cgit/parallel.git/tree/README를 참조하십시오.

더 알아보기

더 많은 예를보십시오 : http://www.gnu.org/software/parallel/man.html

소개 동영상 시청 : https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

튜토리얼을 따라 진행 하십시오 : http://www.gnu.org/software/parallel/parallel_tutorial.html

지원을 받으려면 이메일 목록에 가입 하십시오 : https://lists.gnu.org/mailman/listinfo/parallel


1
답변과 소프트웨어를 작성해 주셔서 대단히 감사합니다.
그렉 Sadetsky

9

pv를 사용할 수 있습니다 :

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

이것으로의 읽기 위치를 알 수 someimput는 , 그래서 치료 위치를 대략 알 수 someimput가 있다.


1
또 다른 빈번한 유스 케이스는 find와의 조합 일 수 있습니다.FIND=( find "$DIR" -type f ) && ${FIND[@]} -print0 | pv -0lps $(${FIND[@]} | wc -l) | xargs -0 -I {} -P 5 <somecmd>
mxmlnkn

3

진행 상황에 대한 일반적인 표시를 찾고 있다면 가장 간단한 방법은 원하는 명령을 수행하기 전에 에코하는 것입니다.

예: cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{}{}처리중인 현재 문자열로 설정

sh -c여러 명령을 실행할 수 있습니다 (참고 : 마지막 명령을 포함하여 모든 명령이 필요한 후 세미콜론) .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.