2014-10-08 4 views
0

제가 작성한 작은 쉘 스크립트에서 다음과 같은 루프가 있습니다.루프가 더 많은 파일을 찾지 못했습니다.

for file in /home/place/incoming/MYSQLIST_*.zip 
do 
    name=`echo $file|awk -F "MYSQLIST_" {'print$2'}` #get type 
    name=`echo $name|awk -F ".zip" {'print$1'}` #remove extension 

    unzip -Co ${file} -d /home/place/incoming/ 

    name=`echo type_${name}` 
    echo $name >> collect.txt 
    directory=`echo /home/place/incoming/${name}.csv` 
    echo $directory >> collect.txt 

    #cleanup 
    rm ${name}.csv 
    rm phpvars.txt 
    mv ${file} ${file}.DONE 
done 
echo Done 

이 스크립트는 대부분 의도 한대로 동작합니다. MYSQLIST _ ####. zip 및 MYSQL _ #######. zip 형식으로 제공되는이 디렉터리에 도착하는 파일이 있습니다.이 스크립트는 MYSQL _ ##이라는 파일을 무시해야합니다. ######.지퍼. 나는 루프에 대해 전체 이름 MYSQL _ #######. zip을 추출하여 collect.txt에 쓰는 것을 발견했다.

type_21345

몇 가지 경우에 그러나

/home/place/incoming/type_12345.csv

, 이것은에서 발견 된 것입니다 :

은 일반적으로 내 collect.txt은 그 안에 다음 것 collect.txt :

MYSQL_12345678

/home/place/incoming/MYSQL_12345678.csv

for 루프 전에 캐치가 누락되었을 가능성이 있습니까, 아니면 루프 내에서 파일 이름이 정말로 필요한지 (MYSQLIST _ *. ZIP)를 확인해야합니다.

나는 "코드를주세요"와 같은 대답을 찾고 있지 않으며, 다른 누군가가 오류 검사에서 비슷한 (동작이 잘못되었거나) 것으로 보이는 지 알고 싶습니다.

+1

'이름 = $ (에코 유형 _ $가 {이름})'보다 효율적으로 기입된다 '이름 = 타입이어야 _ $ {이름}'. – chepner

+1

파일 이름을 처리하기 위해'awk'를 사용하는 대신에'name = $ {file ## * MYSQLIST_}'와'name = $ {name % .zip}'을 추천합니다. – chepner

답변

0

파일 이름에 공백이나 메타 문자가 포함될 수 있으므로 변수 주위에 인용 부호를 사용하는 것이 좋습니다. 즉

name=`echo $name ....` 

name=`echo "$name" ....` 

관련 문제