Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 递归创建文件夹的新tar文件,不包括另一个tar文件中包含的文件_Linux_Bash_Unix_Tar - Fatal编程技术网

Linux 递归创建文件夹的新tar文件,不包括另一个tar文件中包含的文件

Linux 递归创建文件夹的新tar文件,不包括另一个tar文件中包含的文件,linux,bash,unix,tar,Linux,Bash,Unix,Tar,我每天都在备份我的邮件服务器和电子邮件 每晚都会更新一个tar文件以包含当天的新电子邮件,并通过ftp下载到备份服务器 随着时间的推移,这个tar文件变得太大而无法处理 为了解决这个问题,我决定最好创建一个新的tar文件,其中包含所有邮件,减去昨晚备份中已经存在的邮件。所以它最后只剩下那天的新文件 然后,我可以将这个小得多的文件传输到备份服务器 最后,我可以将新的tar文件合并到两台服务器上的主服务器中,为第二天做好准备 你知道我该怎么做吗 使用tar和查找 下面是一个使用find和tar创建f

我每天都在备份我的邮件服务器和电子邮件

每晚都会更新一个tar文件以包含当天的新电子邮件,并通过ftp下载到备份服务器

随着时间的推移,这个tar文件变得太大而无法处理

为了解决这个问题,我决定最好创建一个新的tar文件,其中包含所有邮件,减去昨晚备份中已经存在的邮件。所以它最后只剩下那天的新文件

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

最后,我可以将新的tar文件合并到两台服务器上的主服务器中,为第二天做好准备


你知道我该怎么做吗

使用
tar
查找

下面是一个使用
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
显示is具有“增量功能”:

要创建增量备份,请使用:

tar --create --file=`date +%s`.tbz2 --bzip --listed-incremental=example.snar --verbose example/
或简而言之:

   tar -cvjg example.snar -f `date +%s`.tbz2  example/
   for i in *.tbz2; do tar -xjGf "$i"; done;
要恢复备份,需要将bcakup的所有部分从最旧的解包到最新的解包:

 tar --extract --incremental --file level0.tar
 tar --extract --incremental --file level1.tar
 tar --extract --incremental --file level2.tar
或者,简而言之:

   tar -cvjg example.snar -f `date +%s`.tbz2  example/
   for i in *.tbz2; do tar -xjGf "$i"; done;
下面是一个脚本,用于每周创建一次零级存档(或每月一次,取决于注释行):

并执行它:

   ./backup.sh example/ -v

使用find、grep等创建每日备份,或者使用类似bareos的应用程序,但最好是备份电子邮件的特定工具。我无法在服务器上安装。我有一个非特权用户帐户。使用
tar-t
,您可以列出tar文件的条目。@Joao Vitorino-tar中的compare/diff选项不考虑文件系统中没有出现在tarball中的新文件。