如何使用rsync删除超过1周的文件

我使用rsync来备份文件和文件夹:

rsync -avqz --stats --delete /media/server/ /media/Server2/ 

这会删除源上不存在的文件,并确保目标是源的精确副本

但是,我的老板希望我应该删除文件中不存在的文件,这些文件只有一周的时间。 就像是:

 rsync -avqz --stats --delete(1 week old) /media/server/ /media/Server2/ 

有任何想法吗?

我会build议你和你的老板build立rsnapshot。 它会像往常一样给你快照,然后回到你喜欢的位置。

Rsync不支持这种开箱即用的行为。 你可能会发现像Jaylen这样的另一个工具如rsnapshot被认为是一个很好的举动。

如果你真的想要完全按照你的描述来做,你可以做的就是这样。

  • 首先,运行你的rsync没有删除。 这将只是从你的实时数据复制到你的备份。
  • 然后再次运行rsync删除,但这次在testing模式(-n)。 这将根据您的实时数据中已删除的内容生成要删除的文件列表,但尚未存在于您的备份中。 将此输出保存到具有date的文件中。
  • 现在保留那些要删除的列表,但一个星期后才能处理它们。 保留一个队列,只处理已经在队列中的删除build议至less一个星期。

或者,使用rsync --delete -n的输出,而不是排队,使用其他一些检查,如备份中的最后修改date,以确保只删除一周内没有被编辑的东西。 这不是你要求的行为,而是更容易编程,可能就足够了。

另一个工具是rdiff-backup : http : //www.nongnu.org/rdiff-backup/ ,它保持镜像和按dateconfiguration,增量备份。

rsync会做一些小小的调整

在您要备份的机器上运行命令:

 rsync -abvh --backup-dir=../oldcopysfilesdir/`date +%Y-%m-%d_%H.%M` --delete /path/to/source/ [email protected]:/path/to/target 

这将备份文件和文件夹,并在目标机器上创build一个文件夹“oldcopysfilesdir”,所有旧的副本的更改文件和文件夹,都在特定的时间戳文件夹中。

在目标机器上运行时删除文件夹“oldcopysfilesdir”中的旧副本:

 find /path/to/oldcopysfilesdir/* -mtime +7 -delete 

这个命令会删除7天以前的旧文件和文件夹,但只会删除旧文件。 在“/ path / to / target”中总会有一个“/ path / to / source /”目录的最新镜像。 要自动执行,请为命令创buildanacron或cron作业。