Zip

如何獲得拉鍊炸彈的總大小?

  • December 4, 2020

我今天在搞 Zip 炸彈。我執行我的 python 程序來生成一個 30TB zip 炸彈,它拋出了正常的警告:

Warning: Using nested mode. The output may not be accurate.

這讓我想到:如何檢查 zip 文件的完整大小(摘要中包含每個文件)?有沒有特定的工具可以做到這一點?

**編輯:**建議問題的答案不適用。它返回的值要小得多,只有 60kb。它似乎不是遞歸的,我找不到如何使其遞歸。

對於一般情況,您不能在不解壓縮部分或幾乎所有嵌套組件的情況下執行此操作。如果您手動執行或嘗試編寫腳本,請考慮在磁碟限制下安全執行。

例如,我們創建一個大文件,然後將其壓縮。我們再次壓縮它,連同一個小文件。

yes 1 | head -c1G > file1
zip inner.zip file1
touch file2
zip outer.zip inner.zip file2

現在您可以在不解壓縮任何內容的情況下看到外部 zip 內容的大小,它很小。

$ 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

解壓縮後,您可以看到任何嵌套 zips 文件內容的大小。

$ 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

而且這個棧可以有很多層次的嵌套,很多不同的壓縮文件。因此,如果您想計算總大小,您應該安全地重複這些步驟直到最後一級,或者如果您發現無法處理的大小,則中止該過程。

引用自:https://unix.stackexchange.com/questions/622565