壓縮文件夾但不壓縮特定文件類型但將它們包含在 gz 文件中
我正在使用 tar 和 pigz 來壓縮文件夾並保存備份。此文件夾的大小約為 250 GB 或更多。該文件夾包含多種內容,包括許多不同子文件夾中的大量文本和日誌文件、ISO 和 zip 文件。完全壓縮此文件夾大約需要 1 小時(有時甚至更長時間)。目前我在腳本中使用它。
tar -cf - <data_folder> | pigz -1 > <output_file>.tar.$
我想通過排除 ISO 和 zip 文件的壓縮來減少壓縮時間。我希望將它們(ISO 和 zip 文件)包含在 gzip 文件中(未壓縮)。
**我的問題是:**是否可以根據類型有選擇地壓縮文件,並且仍然在 gzip 輸出中包含未壓縮的文件?如何嘗試這個?
不,你不能。至少不是直接的。
tar
不做任何壓縮。它僅讀取(虛擬)文件系統的一部分,並從中生成一個內聚流。然後,此流通常會傳遞到壓縮工具/庫,例如gzip
/libz。壓縮部分看不到甚至不知道單個文件。它只是壓縮由tar
. 因此,您不能在目前方法中添加選擇性壓縮。您可以做的是增量建構 tar 存檔,方法是單獨壓縮每個文件,然後將其添加到 tar 存檔中。通過這樣做,您可以選擇將(例如)未壓縮的 iso 圖像添加到存檔中。但是請注意,tar 存檔本身不會被壓縮。因此,解壓後,您還必須在適當的情況下單獨解壓縮每個文件。
壓縮 iso 和 zip 文件實際上浪費了多少時間?就像
tar | pigz > <file>
流處理一樣,我猜你並沒有浪費那麼多時間。有塊寫入磁碟,而下一個塊正在被壓縮,同時正在建構流。它同時發生。也許你可以優化你的策略:
您可以將所有 iso 和 zip 文件放入專用目錄,然後分三個步驟建構您的存檔:tar 和壓縮其余文件,添加 iso 目錄,添加 zip 目錄。生成的存檔仍然需要一個冗長的提取過程,即解壓縮外部存檔,然後解壓縮和解壓縮內部存檔。然而,這比解壓縮每個單獨的文件更可行。
或者您調整命令:它必須是文件系統的 tar 存檔還是可以
dd
用來備份整個分區?備份整個分區具有從磁碟連續讀取的優勢,這可能比使用文件系統更快。我相信您可以調整pigz
以使用更大的塊,如果 iso 和 zip 文件是您的問題,這應該可以加快速度。mbuffer
此外,您可以在將結果寫入磁碟之前添加一些緩衝(例如),以進一步優化媒體訪問。