我编写了一个简单的脚本,根据控制文件的内容检查zip文件的内容。
它运行良好,但是当我收到包含空格的文件时,它会失败并出现错误(实际上并不存在)。这是我的代码片段(name
是为批量处理ZIP文件而创建的数组。)
echo "`date '+%m/%d/%y %T:'` List ZIP file contents."
LIST_Array=(`/usr/bin/unzip -l $name | head -n -2|tail -n +4 | sort -r | awk '{print $4}'`)
LISTlen=${#LIST_Array[*]}
#iterate array to 1) build report and 2) look for control file
echo "`date '+%m/%d/%y %T:'` Iterate array to 1) build report and 2) look for control files."
echo -e "`date '+%m/%d/%y %T:'` Files in ZIP file: $name\n" >> $name.report.out
for (( i = 0 ; i < ${#LIST_Array[@]} ; i++ ))
do
echo -e "${LIST_Array[$i]}" >> $name.report.out
done
ZIP中的文件列表被捕获到$name.report.out
中,然后与控制文件本身的内容进行比较。
如何正确显示带空格的文件?我虽然echo -e
会有所帮助,但它似乎没有效果。
感谢。
答案 0 :(得分:2)
因此,zip文件中包含一些文件,其中一些名称中包含空格。在这种情况下,当您列出文件时,awk'{print $ 4}'将不会捕获整个文件名。 read
很好,因为它的最后一个参数捕获了该行的其余部分:
LIST_Array=()
while read length date time filename; do
LIST_Array+=( "$filename" )
done < <(/usr/bin/unzip -qql "$name")