![有沒有辦法估計給定大小的檔案或目錄在使用 tar 和 bzip2 壓縮後將佔用多少空間?](https://rvso.com/image/1607088/%E6%9C%89%E6%B2%92%E6%9C%89%E8%BE%A6%E6%B3%95%E4%BC%B0%E8%A8%88%E7%B5%A6%E5%AE%9A%E5%A4%A7%E5%B0%8F%E7%9A%84%E6%AA%94%E6%A1%88%E6%88%96%E7%9B%AE%E9%8C%84%E5%9C%A8%E4%BD%BF%E7%94%A8%20tar%20%E5%92%8C%20bzip2%20%E5%A3%93%E7%B8%AE%E5%BE%8C%E5%B0%87%E4%BD%94%E7%94%A8%E5%A4%9A%E5%B0%91%E7%A9%BA%E9%96%93%EF%BC%9F.png)
由於即將進行發行版切換,我想備份我的主目錄。然而,我的主目錄有 29 GB。我想知道壓縮後會佔用多少空間tar cvjf home.tar /home
。有沒有一種方法可以用來確定壓縮後的大小?
答案1
該工具tar
(bzip2
由於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 中,您可以檢索tee
with的退出狀態${PIPESTATUS[1]}
。
答案2
很不幸的是,不行。查看壓縮存檔有多大的唯一方法是建立壓縮存檔。沒有工具可以做到這一點,因為該工具將完成壓縮程式的所有工作,而不編寫最終的存檔,這將是浪費時間。
也許您應該考慮將資料分解為可管理的區塊並建立多個存檔。這將使您能夠將歸檔 29 GB 所需的大量時間分解為較小的片段。
答案3
如果不實際壓縮數據,就不可能確定資料將壓縮到什麼大小。根據主目錄中的內容,您可以做什麼得到有根據的猜測。我不知道有任何工具可以自動執行此操作,但這不是一個困難的過程。
許多現代檔案格式已經被壓縮,這意味著再次通過壓縮運行它會給你帶來很少甚至沒有(或負)增益。對於這種類型的數據,您最好跳過壓縮,直接按原樣複製或存檔。例如,壓縮影片(mp4、webm、mov 等)、壓縮影像(jpeg、png 等)、現有檔案(zip、rar、gz、bz2 等)等。
文字檔案通常會壓縮得相當好,特別是如果有大量重複資料(即日誌檔案)。您可以嘗試對檔案子集進行取樣,看看它們是如何壓縮的,並將其用作猜測或使用 50% 之類的值作為粗略估計。
最後,查看每種類型由資料的哪些部分組成,並將其乘以您的估計百分比,以獲得最終大小的估計值。例如,如果 20GB 的數據是壓縮數據,9GB 是文字文件,則最終的壓縮數據大小可能在 21GB 到 25GB 之間。