Linux

Linux確定沒有壓縮的ZIP大小

  • December 12, 2018

我想使用zip命令製作一個 ZIP 文件。Zip 文件將包含大量目錄,其中包含大量子目錄、文件等。

有什麼方法可以計算 ZIP 文件的最終大小,但在實際壓縮磁碟之前?

例如:計算最終的 ZIP 文件大小以確定 ZIP 是否適合特定大小的容器(即使在 tmp 中我們也無法在磁碟上執行操作,因為如果它不適合,那麼壓縮將失敗而不會提供有關存檔大小的資訊)

zip 手冊頁

流式輸入和輸出。zip 還將接受一個破折號(“-”)作為 zip 文件名,在這種情況下,它會將​​ zip 文件寫入標準輸出,從而允許將輸出通過管道傳輸到另一個程序。

所以:

$ zip -r - foo | wc -c

將告訴您目錄 foo 的壓縮大小(以字節為單位)。

7z 無法寫入 zip 文件的標準輸出。

另一種選擇是創建一個記憶體磁碟並壓縮到它。

您可以壓縮到 StdOut 併計算字節數,但 AFAIKzip不會壓縮到 stdout(也不會壓縮到7z可以生成 ZIP 格式的其他實用程序)(*)。

在 Linux 上,您通常會生成 .tar.gz 文件,如果未指定輸出文件,則實用程序會輸出到 stdout:

# compute size
outputSize=$(tar -cz the_directories | wc -c)
# create file
tar -czf some.tar.gz the_directories

請注意,在任何情況下,您都進行了兩次壓縮,如果不執行轉換,您將無法真正預測輸出大小。

(*) 可能是因為您無法在沒有看到結尾的情況下解碼 ZIP 文件。

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