我的脚本看起来像这样:
cp -al $yesterdays_snapshot $todays_snapshot rsync -vadlH --exclude-from excludes.rsyc $source $todays_snapshot
除了一个问题,这很好:
如果昨天我没有排除,但是今天我意识到/目录/caching应该排除,rsync停止查看caching,但cp继续每天复制它。 一段时间后,这意味着快照将从一年前获得/目录/caching内容,这不是所需的行为。 根本不需要快照中的/ directory / cache。
如果从最新的快照中删除/目录/caching,将会更好。
或者,如果cp知道不要复制excludedes.rsync中列出的任何文件,那将会很好
我可以编写一个函数,手动删除todays_snapshot中的所有排除文件,但是这需要一些黑客攻击,而这种感觉就像是那种现成的问题。
有什么build议么?
你想用cp和rsync做什么是创build具有相同的文件备份相互硬链接。
这可能是非常有用的,这就是为什么rsync开发人员已经这样做了,直接在rsync中包含本地function来实现这一点。
这个function是由--link-dest选项提供的。
基本上你的rsync命令看起来像这样rsync -va sourcepath newsnapshotpath --link-dest previoussnapshot 。 Rsync将硬连接任何相同的文件到以前的快照,并根据需要复制新文件。 文件不再存在的文件将不会被链接/复制。
在对另一个问题的回答中, 我展示了一系列命令,您可以发出这些命令来确切地了解这一切是如何工作的。
为了logging,如果你想避免重新发明轮子,你可能也想强烈看待dirvish。 这是专门为了利用--link-destfunction而devise的备份。