rsync 备份保留已删除的文件

Mat*_*sen -1 backup rsync

我必须用 rsync 备份一组用户数据。只有一件小事我不知道该怎么做。当用户删除文件时,它会保留在服务器上。这很好,因为它可能被错误地删除了,但如果它不会永远留在那里就好了。

那么当它们在 SRC 上一段时间(例如 7 天)没有出现时,我如何在 DEST 上进行 rsync 删除文件

我知道我可以编写一个脚本,在文件夹中的每个文件上手动使用 rsync,然后确定是否应该删除 DEST 上的文件,但是这样做只是为了稍后了解 rsync 有这个功能已经。虽然我找不到它。

非常感谢您的时间

Eva*_*son 7

Rsync 不会自行执行此操作。像rsnapshot这样的东西可以让您维护多代基于 rsync 的备份(每小时、每天、每月等),以便您可以检索意外删除的文件。通过使用硬链接,rsnapshot 可以让您保留大量快照,而不会使用比完整备份的“成本”更多的空间。

还有其他解决方案可以做同样的事情 - rsnapshot 恰好是我有个人经验的解决方案。(如果您决定使用“sync_first”选项,我强烈建议您使用它...)


小智 7

这些--backup --backup-dir=标志可能就是您正在寻找的内容,如果您为 backup-dir 指定相对路径,则会在您的目标目录中创建一个目录,并且删除的任何文件都将以其原始路径存储在该目录中。如果你想使用绝对路径当然也可以。

清除旧的已删除文件是另一个问题,我的使用使问题--times变得更加复杂,因为已删除文件上的时间戳将反映文件的最后修改时间,而不是删除时间。我正在考虑的一种选择是使用某种日期字符串构建 backup-dir 值,并使用它来随着时间的推移进行解析和清除。例如--backup-dir=/DELETED_FILES/$(date "+%Y_%m_%d-%H_%M_%S")

在一些示例文件上使用它,最简单的版本是:

rsync --delete --backup --backup-dir=DELETED_FILES/ --recursive --times src/ dest/
Run Code Online (Sandbox Code Playgroud)

或者可以使用的带日期标记的版本是:

rsync --delete --backup --backup-dir=DELETED_FILES/$(date "+%Y_%m_%d-%H_%M_%S") --recursive --times src/ dest/
Run Code Online (Sandbox Code Playgroud)

我会将 DELETED_FILES 目录放置在目标目录之外的绝对路径上,您可能想要这样做。