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

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

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

我应该如何自动化此操作,因为我想在自动化 CRON 脚本中使用此功能,其中没有人按下回车键并输入多卷提示符所需的任何内容。

使用是split唯一的方法吗?

答案1

这是一个解决方案:

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,这始终是一个小小的挑战。

答案2

如有疑问,请阅读手册...

http://www.gnu.org/software/tar/manual/html_node/Multi_002dVolume-Archives.html

或者只需在您最喜欢的互联网搜索引擎中使用以下搜索字符串:

“比一盘磁带或磁盘更长的档案”

GNU 的那部分柏油手册提供了一个合适的脚本(称为新卷)与使用-Ftar 命令的选项。如果您愿意,您可以根据自己的喜好调整该脚本。

享受!

相关内容