2009-12-23 2 views
9

xargs에서 생성 한 명령을 백그라운드로 보낼 수있는 방법을 알고 싶습니다. 예를 들어,xargs에 의해 생성 된 명령을 백그라운드로 보냄

find . -type f -mtime +7 | tee compressedP.list | xargs compress 

내가

find . -type f -mtime +7 | tee compressedP.list | xargs -i{} compress {} & 

.. 등 예상치 못한 시도 고려, 대신 배경에 xargs 명령을 보낼 것 같다?

compress 명령의 각 인스턴스를 백그라운드로 이동 시키려면 어떻게해야합니까?

답변

5

http://www.gnu.org/software/parallel/

find . -type f -mtime +7 | tee compressedP.list | parallel compress 

이있는 파일 이름이 '포함 "또는 공간. -j는 + 0 만들 것입니다 추가 있는지 엿하지의 추가 혜택 그것은 CPU 코어 당 하나 개의 압축을 실행이 나를 위해 작동

6

아마도 압축을 호출하는 매우 빠른 셸 스크립트를 만들 수 있습니다.

#!/bin/sh 
# call it 'compbg' and chmod a+x 
compress $* & 

다음

find . -type f -mtime +7 | tee compressedP.list | xargs -I{} compbg {} 

난 당신이 xargs는 사용 행복 할 것 같아요 있지만 인수 :

-P maxprocs 
     Parallel mode: run at most maxprocs invocations of utility at once. 
이 명령은 티 /의 완료 때까지 한 번에 10 개 파일을 압축/찾아야한다

호출하는 스크립트/쉘에 즉시 제어권을 반환합니다. 당신이 GNU 살펴 병렬있을 수 있습니다 SunOS의 경우

find . -type f -mtime +7 | tee compressedP.list | xargs -I{} -P10 compress {} & 
+0

유닉스 내가 가진 ((당신은 -n 1와 함께이 결합 할 수 있습니다에 각각 압축 할 파일에 대해 새로운 프로세스가 있는지 확인합니다) $ 끝나면 uname -a SunOS의는 Generic_xx7xx1- 5.10 xxx는 Sun Fire)는 -P ($ xargs -P xargs : 불법 옵션 - P xargs : 사용법 : xargs : [-t] [-e [eofstr]] [ [-I eofstr] [-I replstr] [-i [replstr]] [-L #] [-l [#]] [-n # [-x]] [-s 크기] [cmd [args ...] ]) 쉘 스크립트 래퍼 이외의 다른 방법은 무엇입니까? – PoorLuzer

+1

죄송합니다. SunOS에서 많이 찾을 수 없습니다. 컴파일 할 수있는 "xjobs"패키지를 찾았지만 ... http://www.maier-komor.de/xjobs.html – gnarf

2

을 내가 foo에 포함 된 모든 파일

grep와 -rl foo는 ./ 편집 할 때 |.`xargs를가,763을 emacs`을

9

--max-procs/-P 옵션을 사용하면 백그라운드에서 xargs 대상을 실행할 수 있습니다. GNU xargs는 버전 4.2.27의 사람이 페이지에서 :

--max-발동 = 최대-발동, -P 최대-발동

한 번에 최대-발동 공정까지 실행; 기본값은 1입니다. max-procs가 0이면 xargs는 한 번에 가능한 많은 프로세스로 실행됩니다. -n 옵션을 -P와 함께 사용하십시오. 그렇지 않으면 단 한 명의 임원 만 수행 될 가능성이 있습니다.

+0

(흠, 그냥 내 대답은 쉘 스크립트를 작성하는 것에 대한 오프닝 코멘트 이후에 읽지 않은 gnarf 응답의 두 번째 절반을 복제 한 것임을 깨달았습니다. 다른 사람들도 건너 뛰기 위해 내 대답을 남겨 둘 것입니다. 내가했던 것처럼 gnarf의 대답) – RobM