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

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

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

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

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

但是我的老板希望我只删除源中不存在且已存在 1 周的文件。例如:

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

有任何想法吗?

答案1

Rsync 不支持这种开箱即用的行为。您可能会发现rsnapshotJaylen 建议的其他工具是一个不错的选择。

如果您确实想完全按照您描述的方式去做,您可以这样做。

  • 首先,运行 rsync 但不删除。这会将所有内容从实时数据复制到备份。
  • 接下来再次运行 rsync 并删除,但这次是在测试模式 (-n)。这将根据实时数据中已删除但备份中尚未删除的内容生成要删除的文件列表。将此输出保存到带有日期的文件中。
  • 现在保留要删除的事项列表,但一周后才处理它们。保留一个队列,只处理已在队列中至少一周的删除建议。

或者,使用输出,rsync --delete -n但不要排队,而是使用其他检查(例如备份中的上次修改日期)来确保您只删除一周内未编辑的内容。这不是您要求的行为,但编程起来更容易,可能就足够了。

答案2

我建议你和你的老板设置 rsnapshot。它会为你提供快照,并根据你的需要返回任意远的快照。

答案3

另一种工具是rdiff-备份http://www.nongnu.org/rdiff-backup/,它保留镜像和可按日期配置的增量备份。

答案4

简单地说,您可以编写一个小型 bash 脚本来执行 rsync 并删除 7 天前的文档。然后您可以使用 crontab 运行该脚本。

#----------------------------------------------------------
    #!/bin/bash

    rsync -avqz --stats --delete /media/server/ /media/Server2/
    find /media/Server2/* -mtime +7 -exec rm {} \;
#-------------------End of the script-----------------------

相关内容