2012-05-14 3 views
2

내가 파일들을 압축을 풀고 쉘 스크립트가 기존 중지 특정 확장자를 가진 모든 파일을 기다립니다. 나는 모든 파일 압축 풀기 완료 될 때까지 처리를 기다려야합니다. 나는 하나 개의 파일을 위해 그것을하는 방법을 알고 : 그러나다음 파일을 처리 한 후까지 다시 그들을 참아 요,

while [ -s /homes/ndeklein/mzml/JG-C2-1.mzML.gz ] 
do 
    echo "test" 
    sleep 10 
done 

, 내가

while [ -s /homes/ndeklein/mzml/*.gz ] 

나는 다음과 같은 오류 얻을 수행 할 때보다 더 있기 때문에 나는 가정

./test.sh: line 2: [: too many arguments 

을 1 결과. 그렇다면 어떻게 여러 파일에 대해이 작업을 수행 할 수 있습니까? while가 강요되지 않은 경우

답변

2

: 디렉토리가 잠재적으로 파일의 수천 수 있다면

while [ -n "$(ls /homes/ndeklein/mzml/*.gz 2> /dev/null)" ]; do 
    # your code goes here 
    sleep 1; # generally a good idea to sleep at end of while loops in bash 
done 

것은, 당신이 find 사용을 고려하는 대신 ls과 함께 할 수 있습니다 와일드 카드, 즉; find -maxdepth 1 -name "*\.gz"

0

xargs은 당신의 친구입니다.

ls /homes/ndeklein/mzml/*.gz | xargs -I {} gunzip {} 
당신은 쉘의 하위 명령을 실행하고 출력이 있음을 확인할 수 있습니다