我想检查zip里面的文件是不是空的。我知道unzip -l
命令,但它提供了大量信息。
[abc@localhost test]$ unzip -l empty_file_test.zip
Archive: empty_file_test.zip
Length Date Time Name
--------- ---------- ----- ----
0 07-05-2017 06:43 empty_first_20170505.csv
0 07-05-2017 06:43 empty_second_20170505.csv
--------- -------
0 2 files
我通过命令
从zip文件中提取文件名file_names="$(unzip -Z1 empty_file_test.zip)
file_name_array=($file_names)
file1=${file_name_array[0]}
file2=${file_name_array[1]}
我尝试使用-s
选项,但没有用
if [ -s $file1 ]; then
echo "file is non zero"
else
echo "file is empty"
fi
即使文件不为空,也始终打印file is empty
。
答案 0 :(得分:4)
unzip -l empty_file_test.zip | awk 'NR>=4{if($1==0){print $4}}'
可能对您有用,也可以写成
unzip -l empty_file_test.zip | awk 'NR >= 4 && $1==0{print $4}'
答案 1 :(得分:1)
您可以将输出格式化为unzip -l </ p>
unzip -l test.zip | awk '{print $1 "\t" $4}' | tail -n+4 | head -n-2
说明:
unzip -l
解压缩文件并返回deisred信息
awk '{print $1 "\t" $4}'
打印第1列和第4列(大小和文件名)
tail -n+4
从输出中删除前几行(删除标题和不需要的信息)
head -n-2
从输出中删除最后两行(删除不需要的摘要)
修改强>
要将空文件存储到数组中,您可以映射命令的输出:
read -r -a array <<< `unzip -l test.zip | awk '{print $1 "\t" $4}' | tail -n+4 | head -n-2 | awk '{if($1==0) print $2}'`
解释
上面解释了 unzip -l test.zip | awk '{print $1 "\t" $4}' | tail -n+4 | head -n-2
awk '{if($1==0)}{print $2}'
只是为您提供空文件的文件名
<<<
将反引号中的命令输出输入到读命令
read -r -a array
读取变量数组的输入
<强> BUT 强>
您可以使用Sjsam的较短命令并执行相同的操作:
read -r -a array <<< `unzip -l empty_file_test.zip | awk 'NR>=4{if($1==0){print $4}}'`
上面解释了 read -r -a array
<<<
awk 'NR>=4{if($1==0){print $4}}'
NR>=4
推出每一行&gt; 4(剥去标题和不需要的输出)if($1==0){print $4}}
如果大小($ 0)为0则执行{print $4}
{print $4}
输出文件名