如何使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
选项按before
和before
,如其手册页中所述:
--delete-before receiver deletes before transfer, not during
意思是:
- rsync从TARGET中删除从SOURCE中删除的文件。
- rsync开始同步文件。
--delete-after receiver deletes after transfer, not during
意思是:
- rsync开始同步文件。
- rsync删除TARGET中的文件,该文件在同步后从SOURCE中删除。
注意 :– --delete-{before/after}
仅在TARGET中实现。
此命令将复制增量数据并使其与远程服务器保持同步。
- 它只会复制增量数据。
- 如果从源中删除任何数据,它将删除。
- 如果在目的地删除了任何数据,它将从源中再次复制。
- 基本上这个命令将保持两个环境同步。
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