给定一个生成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
错误静音?
答案 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时解压缩。)
man bash
(查找-s
或CONDITIONAL EXPRESSIONS
部分)。答案 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