好的,所以我刚刚读完这一页在改进我的 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 命令的选项。如果您愿意,您可以根据自己的喜好调整该脚本。
享受!