2015-01-21 2 views
0

여러 개의 인수를 프로그램에 전달하려고합니다.찾기를 사용하여 병렬로 프로그램에 인수 전달

find binaries/$package/lib -iname "*.txt" | parallel java -jar proguard/proguard.jar @obfuscateprofile -injars $package.jar -outjars binaries/$package/$pacakge.jar -libraryjars {} 

나는 데모로 에코 사용할 수 있습니다

find binaries/derbypro/lib -iname "*.txt" | parallel echo -libraryjars {} 

내가 find 발견 각 파일에 대해 여러 -libraryjars 인수를 얻을 수있는 프로그램을 원한다. 나는 거기에 다음 파일과 디렉토리가있는 경우 예를 들어, :

file1.txt 
file2.txt 
file3.txt 

을 내가 명령을 실행, 나는 다음과 같이 프로그램을 실행하는 것과 할 것을 권장합니다

programname -libraryjars file1.txt -libraryjars file2.txt -libraryjars file3.txt 

하지만 내가 대신 얻을 이것이다 : 나는 실행할 때 그래서

programname -libraryjars file1.txt 
programname -libraryjars file2.txt 
programname -libraryjars file3.txt 

find binaries/derbypro/lib -iname "*.txt" | parallel echo -libraryjars {} 

나는

-libraryjars file1.txt 
-libraryjars file2.txt 
-libraryjars file3.txt 

그래서이 실행되는 여러 echo 프로그램을 얻을. -N 3으로 예상되는 매개 변수 수를 지정하면 제대로 작동하지만 얼마나 많은 파일을 찾을 수 있습니까? fine 찾을 수 있습니다.

답변

1

를 실행하려면 : 귀하의 경우

은, 당신이 원하는 것은 당신이이처럼 매개 변수를 연결할 수 programname -libraryjars file1.txt -libraryjars file2.txt -libraryjars file3.txt

입니다 나는 .txt 파일의 수가 거대하지 않다고 가정한다. 로 간주 (

find binaries/$package/lib -iname "*.txt" | { while read LINE; do echo "-libraryjars $LINE"; done;} | xargs java -jar proguard/proguard.jar @obfuscateprofile -injars $package.jar -outjars binaries/$package/$package.jar 

제한이 공백 또는 비 정통 문자가 포함 된 파일을 바보짓을 할 수 있는지입니다 :

+0

지금 당장은 25 개의 파일이 있는데 문제가없는 것 같습니다. –

1

map-reduce 패러다임을 따르십시오. 그것은 큰 과제를 작은 과제로 분리하고 당신의 요구를 만족시키지 않는 여러 프로그램에 할당하는 것을 목표로합니다. 예를 들어

, 간단한지도-감소 될 병렬를 사용하여 wc 프로그램 :

cat XXX | parallel --block 10M --pipe wc -l | awk 'BEGIN{count=0;}{count = count+ $1;} END{print count;}' 

확인하십시오 : 자세한 내용은 How to write multicore sorting using GNU Parallel을.

programname -libraryjars `find binaries/$package/lib -name '*.txt' | xargs | sed 's//-libraryjars /g'` 

:

find binaries/derbypro/lib -iname "*.txt" | awk '{params = params " " "-libraryjars " $1;} END {print params;}' | xargs programname 

이 시도 프로그램

0

당신은 -libraryjars 접두사로 찾을에서 어떤 결과 라인을 장식하는 배쉬 기능을 사용하는이 타이 수도 xargs의 구분자).