Tar
如何在多個階段創建拆分 tar 存檔以節省空間?
我有一個非常大的文件夾,我正在嘗試創建一個 tar 存檔。問題是我沒有足夠的額外可用空間來儲存整個存檔,所以我想一次創建 100-200GB 的存檔塊並將它們單獨傳輸到雲儲存。我需要能夠控制何時創建新塊,這樣我的 HDD 就不會被填滿,但是我發現的所有用於創建拆分 tarball 的命令總是在同一目錄中一次創建它。
我找到的最接近的解決方案來自這個問題,但所有回复都基於文件數量而不是大小,這對我的案例很重要,因為我的文件大小分佈不均。
您可以使用
tar
, 與這些選項:--new-volume-script=*命令* --tape-length= *N*
在每個卷結束時,它將呼叫您的腳本,該腳本將有一些環境變數來了解剛剛處理了哪個卷。檢查手冊頁以獲取完整列表,但至少該變數
TAR_VOLUME
非常有用,以防您必須重命名輸出文件,或以某種方式跟踪目前卷:
TAR_VOLUME
正在處理的捲序號
tar
(在讀取多卷存檔時設置)。如果腳本返回 0,
tar
將繼續,否則將停止。例如,這將創建每個卷,最大大小為 20 M,每次達到限制時呼叫您的腳本:
tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=/path/to/myscript.sh --tape-length=20M
該腳本可以很簡單
echo "Next volume";read
,或者您甚至可以從中進行傳輸(重命名該卷,因為一旦您退出/tmp/volume.tar
將被覆蓋)。另一方面,一定要使用 flag
--multi-volume
。如果你不這樣做, tar 會因錯誤而停止(我留下它以防有人搜尋錯誤):tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now
tar xvf /path/to/transferred.volume --multi-volume Prepare volume #2 for /path/to/transferred.volume and hit return:
tar
將提示您輸入新卷。一旦按下Enter
,/path/to/transferred.volume
將再次打開,以此類推。