我尝试使用if-else语句用bash脚本测试最后一次在文件夹中创建的zip存档。如果文件损坏,语句应该返回else语句的主体。对于未损坏的zip文件,退出代码为零,并且执行if语句的主体。如果我有一个损坏的zip文件,-qq
选项不会像预期的那样返回非零错误代码。而是打印一个包含信息的字符串。
if $(ls -Art ~/*.zip | tail -n 1 | xargs unzip -tqq);then
echo 'file is ok'
else
echo 'file is corrupt'
fi
我尝试过使用zip -T
、unzip -tqq
和unzip -tq
的其他方法。每次我得到的不是stderr的错误代码,而是stdin的消息:
“文件#1:错误的zipfile偏移量(本地头sig):0”
另外,我们的计划是将每个不为0的返回值转换为1,但这似乎不是一个优雅的方法。
您可以通过尝试损坏。压缩文件
dd if=/dev/zero of=<filename>.zip bs=1 count=1 seek=1 conv=notrunc
然后
unzip -tqq <filename>.zip
并产生错误消息。我不能让它以预期的方式工作。
为什么-qq
不抑制所有人类可读的信息?
1条答案
按热度按时间cnh2zyt31#
如果是真的...我很怀疑听起来像是unzip里的bug话虽如此,如果你想让一个脚本在unzip打印某个东西时退出1,那么就像这样:
这假定错误进入标准输出。如果错误将转到stderr,则:
如果unzip返回失败,您可能希望它也退出错误: