解压缩:如何传递错误?

时间:2014-03-27 13:04:56

标签: shell terminal unzip

给定一个生成100个.zip文件的脚本,其中一些是空的。 (即使没有任何要压缩的内容,我的脚本也会生成100个.zip文件。)

给出命令:

unzip *.zip

我在空文件上收到错误:

unzip:  cannot find zipfile directory in one of ./data/Archive_03.zip or
        ./data/Archive_03.zip.zip, and cannot find ./data/Archive_03.zip.ZIP, period.

如何绕过这些假的.zip文件并将此unzip错误静音?

2 个答案:

答案 0 :(得分:3)

核心解决方案

使用bash,您可以循环使用zip文件而不是使用glob。这样即使一个文件失败,也可以阻止Argument list too long error for rm, cp, mv commands并继续。

dir="/path/to/zip-dir"
cd "$dir"

for zf in *.zip
do
  unzip "$zf"
done

在做之前进行测试

您可以在for循环中添加额外的测试,以便在解压缩之前检查文件是否存在并且大小大于零

if [[ -s "$zf" ]];
then
  unzip "$zf" # greater exist & size>0
else
  printf "file doesn't exists or null-size: %s\n" "$zf"
fi

较短的版本将是:[[ -s "$zf" ]] && unzip "$zf"(仅在存在且> 0时解压缩。)

参考

答案 1 :(得分:1)

选项1:谨慎使用 - http://www.manpagez.com/man/1/unzip/

unzip -fo *.zip

选项2:这可能不起作用,适用于.gz扩展名。

tar -zxvf test123.tar.gz

z -- unzip
x -- extract the file
v -- verbose
f -- forcefully done