Bash

我可以自動化 tar 的多卷功能嗎?

  • March 18, 2019

好的,所以在改進我的 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,這始終是一個小挑戰。

引用自:https://unix.stackexchange.com/questions/21373