如何检查zip文件中的文件长度

时间:2017-07-05 07:43:49

标签: bash shell zip unzip file-length

我想检查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

2 个答案:

答案 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}输出文件名