有沒有辦法估計給定大小的檔案或目錄在使用 tar 和 bzip2 壓縮後將佔用多少空間?

有沒有辦法估計給定大小的檔案或目錄在使用 tar 和 bzip2 壓縮後將佔用多少空間?

由於即將進行發行版切換,我想備份我的主目錄。然而,我的主目錄有 29 GB。我想知道壓縮後會佔用多少空間tar cvjf home.tar /home。有沒有一種方法可以用來確定壓縮後的大小?

答案1

該工具tarbzip2由於j您使用而隱式涉及)透過管道傳輸到wc(這是用於計算位元組的標準(POSIX)工具)。以下命令將列印大小(以位元組為單位):

tar cj /home | wc -c

該命令確實(我在這裡引用了另一個答案)「壓縮程式的所有工作,而不編寫最終的存檔,這將是浪費時間」;但如果你真的想知道,那麼這是唯一堅定的方法。


您可以像這樣改進整體方法:

tar cj /home | tee home.tbz2 | wc -c
  • 如果您很幸運並且您擁有的空間home.tbz2足夠,那麼您將不會收到任何錯誤tee,並且檔案最終的大小將等於wc -c報告的大小。
  • 否則tee將報告no space left,但它將繼續寫入其標準輸出。wc -c會告訴你文件有多大。實際的(不完整的)檔案會更小,您應該稍後將其刪除。

tar與您一起使用時v可能會錯過一則no space left訊息。您仍然可以透過將獲得的輸出wc -c與 的實際大小進行比較來判斷發生了什麼home.tbz2。在 Bash 中,您可以檢索teewith的退出狀態${PIPESTATUS[1]}

答案2

很不幸的是,不行。查看壓縮存檔有多大的唯一方法是建立壓縮存檔。沒有工具可以做到這一點,因為該工具將完成壓縮程式的所有工作,而不編寫最終的存檔,這將是浪費時間。

也許您應該考慮將資料分解為可管理的區塊並建立多個存檔。這將使您能夠將歸檔 29 GB 所需的大量時間分解為較小的片段。

答案3

如果不實際壓縮數據,就不可能確定資料將壓縮到什麼大小。根據主目錄中的內容,您可以做什麼得到有根據的猜測。我不知道有任何工具可以自動執行此操作,但這不是一個困難的過程。

許多現代檔案格式已經被壓縮,這意味著再次通過壓縮運行它會給你帶來很少甚至沒有(或負)增益。對於這種類型的數據,您最好跳過壓縮,直接按原樣複製或存檔。例如,壓縮影片(mp4、webm、mov 等)、壓縮影像(jpeg、png 等)、現有檔案(zip、rar、gz、bz2 等)等。

文字檔案通常會壓縮得相當好,特別是如果有大量重複資料(即日誌檔案)。您可以嘗試對檔案子集進行取樣,看看它們是如何壓縮的,並將其用作猜測或使用 50% 之類的值作為粗略估計。

最後,查看每種類型由資料的哪些部分組成,並將其乘以您的估計百分比,以獲得最終大小的估計值。例如,如果 20GB 的數據是壓縮數據,9GB 是文字文件,則最終的壓縮數據大小可能在 21GB 到 25GB 之間。

相關內容