壓縮資料夾,但不會壓縮特定檔案類型,而是將它們包含在 gz 檔案中

壓縮資料夾,但不會壓縮特定檔案類型,而是將它們包含在 gz 檔案中

我使用 tar 和 pigz 來壓縮資料夾並保存備份。此資料夾的大小約為 250 GB 或更多。該資料夾包含各種內容,包括許多不同子資料夾中的大量文字和日誌檔案、ISO 和 zip 檔案。完全壓縮此資料夾大約需要 1 小時(有時甚至更長)。目前我在腳本中使用它。

tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$

我想透過排除 ISO 和 zip 檔案的壓縮來減少壓縮時間。我希望它們(ISO 和 zip 檔案)包含在 gzip 檔案中(未壓縮)。

我的問題是這樣的:是否可以根據類型選擇性地壓縮文件,並且仍然在 gzip 輸出中包含未壓縮的文件?如何嘗試這個?

答案1

不,你不能。至少不是直接的。

tar不做任何壓縮。它僅讀取(虛擬)檔案系統的一部分,並從中產生一個內聚流。然後,該流通常會傳遞到壓縮工具/庫,例如gzip/libz。壓縮部分看不到甚至不知道單一檔案。它只是壓縮由 產生的流tar。因此,您無法將選擇性壓縮新增至目前的方法。

您可以做的是透過單獨壓縮每個檔案然後將其新增至 tar 檔案中來逐步建立 tar 檔案。透過這樣做,您可以選擇將(例如)未壓縮的 iso 映像新增至檔案中。但請注意,tar 檔案本身不會被壓縮。因此,解壓縮後,您還必須在適當的情況下單獨解壓縮每個檔案。

壓縮 isos 和 zip 檔案實際上損失了多少時間?看到tar | pigz > <file>流處理我猜你不會浪費那麼多時間。有塊寫入磁碟,同時正在壓縮下一個區塊,同時正在建構流。它是同時發生的。

也許你可以優化你的策略:

您可以將所有 iso 和 zip 檔案放入專用目錄中,然後分三個步驟建立檔案:tar 並壓縮其餘部分、新增 iso 目錄、新增 zip 目錄。產生的存檔仍然需要一個漫長的提取過程,即解開外部存檔,然後解壓縮並解開內部存檔。然而,這比解壓縮每個單獨的檔案更可行。

或者您調整命令:它是否必須是檔案系統的 tar 存檔,或者您可以使用它dd來備份整個分割區嗎?備份整個分割區的優點是可以從磁碟連續讀取,這可能比使用檔案系統更快。我確信您可以調整pigz以處理更大的區塊,如果 iso 和 zip 檔案是您的問題,這應該會加快您的速度。此外,您可以mbuffer在將結果寫入磁碟之前添加一些緩衝(例如),以進一步優化媒體存取。

相關內容