我维护一个大文件夹,并且该文件夹定期同步到远处的另一个文件夹。
有时我更改本地文件夹的名称,然后下次我rsync
到远程文件夹时需要发送整个文件,即使唯一需要发送的实际上是文件名已更改的信息。
有什么方法可以rsync
找出名称/路径更改吗?
我在这里浏览了一下:http://linux.die.net/man/1/rsync,但找不到类似的东西。
答案1
如果本地和远程服务器都支持进行硬链接的能力,您可以使用此技巧来获得您想要的东西。这篇博客文章讨论了该方法,标题为:使用 Rsync 检测文件移动和重命名。
常规步骤
正常同步
$ rsync -avHP --delete-after ~/family/Photos remotebox:backups
现在做一些改变
$ cd ~/family $ cp -rlp Photos Photos-work
当其开关为:复制目录 *R* 递归 + *L*ink 文件而不是复制 + *P* 保留模式、所有权和时间戳(对于非硬链接内容,例如目录)时,cp 完成得非常快
在 Photos-work 目录中进行重组:您可以重命名、移动、添加和删除任何文件。但不要触摸 Photos 中的树,该目录(两台计算机上具有相同的路径集)将允许 rsync 快速找到要在远程计算机上的 Photos-work 下克隆的数据。
完成重组后,运行以下命令:
$ rsync -avHP --delete-after --no-inc-recursive ~/family/Photos ~/family/Photos-work remotebox:backups
通过同时传输两棵树并关闭增量递归,rsync 在传输任何内容之前收集所有硬链接。现在,它可以在几秒钟内重建远程计算机上的照片作品。接下来您将通过以下方式完成:
$ mv Photos Photos-OLD $ mv Photos-work Photos
您可以在本地和远程计算机上执行此操作。您可以根据需要保留 OLD 目录,它所占用的空间通常可以忽略不计。
答案2
齐奏比 raw 更有可能做你想做的事rsync
。它使用该rsync
协议来同步文件。