如何使rsync删除已从源文件夹中删除的文件?

我最近建立了一台带有Ubuntu Server的机器来托管游戏服务器。 我为每个游戏服务器安装了一个备份插件,可以在机器上的特定文件夹中频繁备份游戏世界文件。 我还建立了一个cron任务,使用rsync和-a选项每晚自动将这些备份复制到我的Dropbox文件夹。

几个月后,我的Dropbox帐户达到了存储限制,我意识到我无法保留这么多备份,因此我配置了游戏服务器备份插件,以便不保留这么多备份,然后等了几天才看看它是否会删除按计划每周执行的旧备份。 备份插件最终完成了它的工作并删除了旧的备份,所以我期待rsync cron任务随后从我的Dropbox文件夹中删除旧备份以匹配源文件夹,但它还没有这样做。 所以我有几个问题:

  • 默认情况下, rsync文件添加到已添加到源文件夹的目标文件夹中,并更改源文件夹中已更改的文件但不删除从源文件夹中删除的文件?

  • 如果是这种情况,那么使rsync做到这一点的最佳方法是什么? 我希望目标文件夹完美地反映源文件夹,这意味着删除已从源文件夹中删除的任何文件。

我看到rsync手册页中列出的一些选项可能会起作用,但是因为我不熟悉。

要删除目标中的文件,请在命令中添加--delete选项。 例如:

 rsync -avh source/ dest/ --delete 

当您在该命令中使用某些选项delete时, rsync命令不会删除任何文件。 因此,如果源中添加了任何文件或文件夹,它将同步到目标而不进行任何删除。

我建议您使用rsync从源文件进行make备份,并使用find ... rm删除文件的时间段或文件大小:

 rsync [options] SOURCE TARGET find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \; 

上面的代码块,从源代码进行备份,然后删除上次修改时间超过2个月的每个文件。

UPDATE

我发现delete选项仅适用于TARGET,如果从源中删除某些文件, rsync --delete从TARGET中删除它们。 delete选项按beforebefore ,如其手册页中所述:

 --delete-before receiver deletes before transfer, not during 

意思是:

  1. rsync从TARGET中删除从SOURCE中删除的文件。
  2. rsync开始同步文件。

--delete-after receiver deletes after transfer, not during

意思是:

  1. rsync开始同步文件。
  2. rsync删除TARGET中的文件,该文件在同步后从SOURCE中删除。

注意 :– --delete-{before/after}仅在TARGET中实现。

此命令将复制增量数据并使其与远程服务器保持同步。

  1. 它只会复制增量数据。
  2. 如果从源中删除任何数据,它将删除。
  3. 如果在目的地删除了任何数据,它将从源中再次复制。
  4. 基本上这个命令将保持两个环境同步。

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

例:

 rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup