今天我在玩拉链炸弹。我运行我的 python 程序来生成一个 30TB 的 zip 炸弹,它抛出了正常的警告:
Warning: Using nested mode. The output may not be accurate.
这让我思考:如何检查 zip 文件的完整大小(摘要中的每个文件)?有没有特定的工具可以做到这一点?
编辑:建议问题的答案不适用。它返回的值要小得多,只有 60kb 左右。它看起来不像是递归的,而且我找不到如何使其递归。
答案1
对于一般情况,如果不解压缩部分或几乎所有嵌套组件,则无法执行此操作。如果您手动执行此操作或尝试创建脚本,请考虑在磁盘限制下安全地执行此操作。
例如,我们创建一个大文件,然后将其压缩。我们再次将其与一个小文件一起压缩。
yes 1 | head -c1G > file1
zip inner.zip file1
touch file2
zip outer.zip inner.zip file2
现在,无需解压任何内容,您就可以看到外部拉链内容的大小,该内容很小。
$ unzip -v outer.zip
Archive: outer.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
1042294 Stored 1042294 0% 2020-12-04 10:13 7093703f inner.zip
0 Stored 0 0% 2020-12-04 10:13 00000000 file2
-------- ------- --- -------
1042294 1042294 0% 2 files
解压缩后,您可以查看任何嵌套 zip 文件内容的大小。
$ unzip outer.zip
$ unzip -v inner.zip
Archive: inner.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
1073741824 Defl:N 1042134 100% 2020-12-04 10:12 5aa3a8cc file1
-------- ------- --- -------
1073741824 1042134 100% 1 file
而且这个堆栈可以有很多层次的嵌套,很多不同的压缩文件。因此,如果您想计算总大小,您应该安全地重复这些步骤,直到最后一个级别,或者如果您看到无法处理的大小,则中止该过程。