Linux
Linux確定沒有壓縮的ZIP大小
我想使用
zip
命令製作一個 ZIP 文件。Zip 文件將包含大量目錄,其中包含大量子目錄、文件等。有什麼方法可以計算 ZIP 文件的最終大小,但在實際壓縮磁碟之前?
例如:計算最終的 ZIP 文件大小以確定 ZIP 是否適合特定大小的容器(即使在 tmp 中我們也無法在磁碟上執行操作,因為如果它不適合,那麼壓縮將失敗而不會提供有關存檔大小的資訊)
從zip 手冊頁:
流式輸入和輸出。zip 還將接受一個破折號(“-”)作為 zip 文件名,在這種情況下,它會將 zip 文件寫入標準輸出,從而允許將輸出通過管道傳輸到另一個程序。
所以:
$ zip -r - foo | wc -c
將告訴您目錄 foo 的壓縮大小(以字節為單位)。
7z 無法寫入 zip 文件的標準輸出。
另一種選擇是創建一個記憶體磁碟並壓縮到它。
您可以壓縮到 StdOut 併計算字節數,但 AFAIK
zip
不會壓縮到 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 文件。