Rsync:常规文件/文件夹同步

Rsync:常规文件/文件夹同步

我有一个文件服务器,它负责每天从多个工作站提取文件夹树。我目前的方法是使用 rsync,(只要目录名称和/或文件保持不变,这种方法就很好用)然而,当文件在子目录1,rsync 会将它们复制到服务器,从而创建重复项。

我必须手动查找并删除上次同步时留在服务器上的无关文件/文件夹。请注意,我无法使用 rsync 的- 删除标记,因为来自工作站的任何同步都会镜像该特定文件夹树,而不是将它们合并到服务器。

直观图解:

Server:         Workstation1        Workstation2        Workstation(n)
Folder*         Folder*             Folder*             Folder*
-subdir1        -subdir1            -subdir1            -subdir(n)
  -file1          -file1              -file2              -file(n)
  -file2
  -file(n)
  • 是否有一个简单的脚本(最好用 bash 编写,没什么花哨的)可以在文件重命名或移动到不同的子目录时完成删除多余的文件/文件夹?
  • 是否有其他程序,与 rsync 非常相似,可以以更简单的方式自主完成此任务?我研究过 unison,但我不喜欢它保留本地数据库来保存同步信息。
  • 关于我该如何解决这个问题,有什么建议吗?

提前感谢您的帮助。

编辑: 我最近尝试了 unison,我可以肯定地说现在它是不可能的。unison 是一个双向同步工具,从我的测试来看,它将服务器上现有的文件镜像到所有工作站。——这是不受欢迎的。

最好情况下,我希望文件/文件夹保留在各自的工作站内,并仅合并到服务器。又称为单向同步;但重命名/移动会传播到服务器。

我可能得调查一下Git/Mercurial/Bazaar如上所述凯尔,但仍不确定自己是否适合这份工作。

答案1

我认为 Unison 甚至 Git/Mercurial/Bazaar 可能是更好的选择。

bash 脚本的执行非常困难,因为文件的重命名与新文件的创建无法区分,而这正是您在使用 rsync 时遇到的问题。

如果是我,我会尝试使用 Git 或 Mercurial。这可能需要一些额外的用户培训,但这确实是最好的选择。此外,它还为您提供版本控制的好处,以便您可以恢复错误。

相关内容