递归创建文件夹的新tar文件,排除另一个tar文件中包含的文件

时间:2018-11-13 10:57:03

标签: linux bash unix tar

我每天备份邮件服务器电子邮件。

每天晚上更新tar文件以包含当天的新电子邮件,然后通过ftp将其下载到备份服务器。

随着时间的流逝,此tar文件变得太大而无法处理。

要解决这个问题,我认为最好创建一个新的tar文件,其中包含所有邮件,减去昨晚备份中已经存在的邮件。因此,它仅以当天的新文件结尾。

然后,我可以将此小得多的文件传输到备份服务器。

最后,我可以将新的tar文件合并到两台服务器的主服务器中,以备第二天使用。

有什么想法可以做到这一点吗?

1 个答案:

答案 0 :(得分:0)

tarfind一起使用 这是一个示例脚本,可使用fullincremental

创建findtar备份
#!/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