2014-09-26 4 views
0

zip 파일을 가져 와서 내용을 디렉토리에 압축 해제하는 Korn 쉘 스크립트를 작성 중입니다.ksh 디렉토리에서 파일 이름을 읽음

파일이 디렉토리에 항상있는 것은 아니며 이름에 출시 날짜가있을 수 있습니다. ALLIANCEBANK_DELTA_20141004_ABE.zip.

파일의 존재 여부를 확인하기 위해 빠른 스크립트를 작성하여 날짜를 * (ALLIANCEBANK_DELTA_*_ABE.zip)으로 바꿉니다.

변수를 반향하면 이름이 확장되지만 if 문은 변수를 확장하지 않습니다.

#!/bin/ksh 

ALLIANCE_BANKFILE=/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT/ALLIANCEBANK_DELTA_*_ABE.zip 
echo $ALLIANCE_BANKFILE 
if [[ -e $ALLIANCE_BANKFILE ]] 
then 
    print "$ALLIANCE_BANKFILE found" 
else 
    print "$ALLIANCE_BANKFILE not found" 
fi 

running this gives me: 

$ ./file-exists-test.ksh 
/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT/ALLIANCEBANK_DELTA_20141004_ABE.zip 
/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT/ALLIANCEBANK_DELTA_*_ABE.zip not found 

답변

1

와일드 카드의 확장은 하지 변수 할당에서 발생한다. 변수가 따옴표로 묶이지 않으므로 에코에서 발생합니다.

ksh93이있는 경우 다음을 수행 할 수 있습니다. 배열에 에 파일 이름 (0, 1 이상있을 수 있음)을 저장하십시오. ~(N:pattern) 양식을 사용하여 패턴과 일치하는 파일이 없으면 패턴이 빈 문자열로 바뀝니다 (기본값 : 일치하는 파일이 없으면 패턴 문자열은 그대로 유지됨).

dir=/swift0/usrdata/messages/FA_ALLIANCE_BANKFILE_OUT 
ALLIANCE_BANKFILES=(~(N:$dir/ALLIANCEBANK_DELTA_*_ABE.zip)) # use an array 

if ((${#ALLIANCE_BANKFILES[@]} == 0)) 
then 
    print "no ALLIANCE_BANKFILES found" 
else 
    print "${#ALLIANCE_BANKFILES[@]} files found:" 
    printf "%s\n" "${ALLIANCE_BANKFILES[@]}" 
fi 
관련 문제