제가 작성한 작은 쉘 스크립트에서 다음과 같은 루프가 있습니다.루프가 더 많은 파일을 찾지 못했습니다.
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)를 확인해야합니다.
나는 "코드를주세요"와 같은 대답을 찾고 있지 않으며, 다른 누군가가 오류 검사에서 비슷한 (동작이 잘못되었거나) 것으로 보이는 지 알고 싶습니다.
'이름 = $ (에코 유형 _ $가 {이름})'보다 효율적으로 기입된다 '이름 = 타입이어야 _ $ {이름}'. – chepner
파일 이름을 처리하기 위해'awk'를 사용하는 대신에'name = $ {file ## * MYSQLIST_}'와'name = $ {name % .zip}'을 추천합니다. – chepner