ksh从一个目录中读取文件名
问题描述:
我正在编写一个Korn Shell脚本,它将取出一个zip文件并将内容解压到一个目录中。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
答
通配符的扩张确实不发生在变量赋值。它确实发生在回声中,因为变量没有被引用。
如果您有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