用于循环查找比它应该更多的文件

时间:2014-10-08 16:01:12

标签: linux shell sh

我在我写的一个小shell脚本中有以下for循环。

    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的文件_ ## ######。压缩。我注意到这个for循环已经提取了整个名称MYSQL _ ########。zip并将其写入collect.txt。

通常我的collect.txt会包含以下内容:

type_21345

/home/place/incoming/type_12345.csv

然而在少数情况下,这是在collect.txt中找到的:

MYSQL_12345678

/home/place/incoming/MYSQL_12345678.csv

我可能在for循环之前错过了一个catch,或者我应该在循环中找到一个,以检查文件的名称是否真的应该是什么(MYSQLIST _ * .ZIP)?

我不是在寻找像“给我代码”这样的答案,我想知道是否有其他人看到类似的东西(循环行为不端)或错误检查的指导。

1 个答案:

答案 0 :(得分:0)

如果文件名中有空格或元字符,您可能希望在变量周围加上引号。即。

name=`echo $name ....`

应该是

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