如何获得拉链炸弹的总大小?

如何获得拉链炸弹的总大小?

今天我在玩拉链炸弹。我运行我的 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

而且这个堆栈可以有很多层次的嵌套,很多不同的压缩文件。因此,如果您想计算总大小,您应该安全地重复这些步骤,直到最后一个级别,或者如果您看到无法处理的大小,则中止该过程。

相关内容