我可以自动化 tar 的多卷功能吗?

Ind*_*ial 8 bash cron tar backup split

好的,所以我在改进我的 Debian 服务器上当前的备份解决方案之后,刚刚通读了这个页面。Tar 似乎提供了一个相当不错的多卷功能,尽管当我尝试它时,它要求我提供Prepare volume #X for ‘mybackup.tar.gz’ and hit return:.

我应该如何自动执行此操作,因为我想在自动 CRON 脚本中使用此功能,在该脚本中没有人推动返回并输入多卷提示所需的任何内容。

使用split是唯一的方法吗?

enz*_*tib 14

这是一个解决方案:

printf 'n file-%02d.tar\n' {2..100} | 
    tar -ML 716800 -cf file-01.tar Documents/ 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

其中 100 是一个大于或等于卷数的数字。

编辑

设置一个大数字应该不是问题,尽管我倾向于不接受一个荒谬的数字。

另一种可能是“下一卷”脚本,您可以使用该-F选项进行设置,

tar -ML 716800 -F './myscript file' -cf file.tar Documents/ 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

然后在./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"
Run Code Online (Sandbox Code Playgroud)

它将在每个卷结束时执行,并将移动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
Run Code Online (Sandbox Code Playgroud)

#!/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
Run Code Online (Sandbox Code Playgroud)

./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
Run Code Online (Sandbox Code Playgroud)

显然,您必须在这里和那里更改许多位以适应您的情况并确保它可以在cron.