Bash
我可以自動化 tar 的多卷功能嗎?
好的,所以在改進我的 Debian 伺服器上的目前備份解決方案之後,我剛剛通讀了這個頁面。Tar 似乎提供了一個相當不錯的多卷功能,儘管當我嘗試它時,它要求我使用
Prepare volume #X for ‘mybackup.tar.gz’ and hit return:
.我應該如何自動執行此操作,因為我想在自動 CRON 腳本中使用此功能,在該腳本中沒有人推送返回並輸入多卷提示所需的任何內容。
是使用
split
唯一的方法嗎?
這是一個解決方案:
printf 'n file-%02d.tar\n' {2..100} | tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null
其中 100 是大於或等於卷數的數字。
編輯
設置一個大數字應該不是問題,儘管我傾向於不採用一個荒謬的數字。
另一種選擇可能是“下一卷”腳本,您可以使用該
-F
選項進行設置,tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null
然後
./myscript
放在#!/bin/bash prefix="$1" n=1 while [[ -e "$prefix-$n.tar" ]]; do ((n++)) done mv "$prefix.tar" "$prefix-$n.tar" echo "$prefix-$n.tar"
它將在每個卷結束時執行,並將移動
file.tar
到適當的fileNNN.tar
. 對於最後一卷,腳本不會被執行,所以最後一卷的名稱保持不變file.tar
。編輯 2
我最終得到了以下詳細的解決方案。
這裡有兩個腳本,一個用於創建,另一個用於提取:
#!/bin/bash # CREATION SCRIPT # save on file the initial volume number echo 1 >number # multi-volume archive creation tar -ML 100000 -F './tar-multi-volume-script c file' -cf file.tar Documents2/ 2>&- # execute the "change-volume" script a last time ./tar-multi-volume-script c file
和
#!/bin/bash # EXTRACTION SCRIPT # save on file the initial volume number echo 1 >number # execute the "change-volume" script a first time ./tar-multi-volume-script x file # multi-volume archive extraction tar -M -F './tar-multi-volume-script x file' -xf file.tar 2>&- # remove a spurious file rm file.tar
由哪裡
./tar-multi-volume-script
給出#!/bin/bash # TAR INVOKED SCRIPT mode="$1" prefix="$2" n=$(<number) case $mode in c) mv "$prefix.tar" "$prefix-$n.tar" ;; x) cp "$prefix-$n.tar" "$prefix.tar" ;; esac echo $((n+1)) >number
顯然,您必須在這里和那裡更改許多位以適應您的情況並確保它可以正常工作
cron
,這始終是一個小挑戰。