![](/img/trans.png)
[英]how to create tar file so that files at placed at root folder of tar.gz file
[英]Create new tar file of a folder recursively, excluding files contained in another tar file
我正在每天备份我的邮件服务器电子邮件。
每天晚上都会更新 tar 文件以包含当天的新电子邮件,并通过 ftp 下载到备份服务器。
随着时间的推移,这个 tar 文件变得太大而无法处理。
为了解决这个问题,我决定最好创建一个新的 tar 文件,其中包含所有邮件,减去昨晚备份中已经存在的邮件。 所以它最终只有那天的新文件。
然后我可以将这个小得多的文件传输到我的备份服务器。
最后,我可以将新的 tar 文件合并到两台服务器上的主服务器,为第二天做好准备。
任何想法我怎么能做到这一点?
使用tar
和find
这是一个使用find
和tar
创建full
备份和incremental
备份的示例脚本
#!/bin/bash
bkdir="/home/backup"
bklog="/var/log/backup.log"
dbkdir="/home/backup/files/daily"
wbkdir="/home/backup/files/weekly"
curdate=`date +%Y-%M-%d-%H:%M:%S`
ardate=`echo $curdate | sed -e 's/:/_/g' -e 's/-/_/g'`
wday=`date +%a`
files_full_backup () {
echo -e "Archiving files...n"
tar cjpf "$1/full_files_$ardate.tar.bz2" "$bkdir"
}
files_inc_backup () {
echo -e "Archiving files...n"
find $bkdir -mtime -1 -exec tar cvjpf "$1/inc_files_$ardate.tar.bz2" {} ;
}
### add some choice what kind of backup to do - full or incremental
if [ $wday != Sun ]
then
echo -e "As today is not Sunday - I'll start incremental backup.n"
files_inc_backup $dbkdir
else
echo -e "As today is Sunday - I'll start full backup.n"
files_full_backup $wbkdir
fi
仅使用tar
(增量备份)
man tar
显示它具有“增量功能”:
-g, --listed-incremental=FILE
Handle new GNU-format incremental backups. FILE is the name of a snapshot file, where tar stores addi‐
tional information which is used to decide which files changed since the previous incremental dump and,
consequently, must be dumped again. If FILE does not exist when creating an archive, it will be cre‐
ated and all files will be added to the resulting archive (the level 0 dump). To create incremental
archives of non-zero level N, create a copy of the snapshot file created during the level N-1, and use
it as FILE.
When listing or extracting, the actual contents of FILE is not inspected, it is needed only due to syn‐
tactical requirements. It is therefore common practice to use /dev/null in its place.
要创建增量备份使用:
tar --create --file=`date +%s`.tbz2 --bzip --listed-incremental=example.snar --verbose example/
或简写:
tar -cvjg example.snar -f `date +%s`.tbz2 example/
要恢复备份,需要从最旧到最新解压缩 bcakup 的所有部分:
tar --extract --incremental --file level0.tar
tar --extract --incremental --file level1.tar
tar --extract --incremental --file level2.tar
或者,简而言之:
for i in *.tbz2; do tar -xjGf "$i"; done;
这是一个每周一次(或每月一次,取决于注释行)创建零级存档的脚本:
#!/bin/sh
SOURCE="$1"
test -d "$SOURCE" || exit 1
DEST_DIR=`date +%G-%V`; #weekly
#DEST_DIR=`date +%Y-%m`; #monthly
mkdir -p $DEST_DIR;
shift;
tar --create "$@" --preserve-permissions --totals --bzip \
--file="$DEST_DIR"/`date +%F-%s`.tbz2 \
--listed-incremental="$DEST_DIR"/backup.snar \
--no-check-device --exclude-vcs \
--exclude-tag-under=access.log --exclude='*.log' \
--exclude-caches --exclude-tag-under=IGNORE.TAG "$SOURCE"
并执行它:
./backup.sh example/ -v
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.