我运行一个带有插件的游戏服务器,该插件将每小时的服务器备份放在 /backups 中。1 天后,该插件每天保存 2 个备份。我想将此备份目录同步到包含超过 2 天的文件的远程服务器,这样它就不会同步最终会在一天结束时被删除的文件。为此,我运行此脚本:
find /path/backups/ -type f -mtime +2 -exec rsync -vPhd -e "ssh -p 512" --ignore-existing --delete {} me@host:/remote/path/server-backups/ \;
但是,--delete 实际上并没有删除目标主机上的旧文件。这是因为 mtime 吗?有解决方法吗?
答案1
exec
find 中的将分别 rsync 每个文件,因为每次find
将返回 1 个文件。因此,您的--delete
命令将不起作用,因为您的命令基本上是scp
你可以做的是
find /path/backups/ -type f -mtime -2 -printf '%P\n' | rsync -avz --progress --delete --exclude-from=- -e "ssh -p 512" /path/backups/ me@host:/remote/path/server-backups/
这会将文件夹 rsyncbackups
到server-backups
,但会排除 2 天以内的文件。您可以先将 放入--dry-run
rsync 中进行测试。
答案2
尝试使用 --recursive
它看起来应该是这样的:
find /path/backups/ -type f -mtime +2 -exec rsync -vPhd -e "ssh -p 512" --ignore-existing --recursive --delete {} me@host:/remote/path/server-backups/ \;