Zip
如何獲得拉鍊炸彈的總大小?
我今天在搞 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
而且這個棧可以有很多層次的嵌套,很多不同的壓縮文件。因此,如果您想計算總大小,您應該安全地重複這些步驟直到最後一級,或者如果您發現無法處理的大小,則中止該過程。