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

我有一个文件服务器,负责每天从多个工作站中提取一个文件夹树。 我目前使用的方法是使用rsync(提供的目录名称和/或文件保持不变),但是,当文件被重命名或在subdir1中移动时,rsync会将它们复制到服务器,创build重复项。

我必须手动查找并删除以前同步期间留在服务器上的无关文件/文件夹。 请注意,我不能使用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是一个双向同步工具,从我的testing中,它将服务器上存在的文件映射到所有工作站。 – 这是不需要的。

最好,我想文件/文件夹留在其各自的工作站,只是合并到服务器。 AKA单向同步; 但重命名/移动传播到服务器。

我可能不得不像Kyle提到的Git / Mercurial / Bazaar一样,但是仍然不确定他们是否适合这份工作。

我认为Unison甚至Git / Mercurial / Bazaar可能是一个更好的select。

一个bash脚本将是非常困难的,因为文件的重命名将不可能与新文件的创build有所区别,而这正是您用rsync运行的内容。

如果是我,我会尝试使用Git或Mercurial。 这可能需要一些额外的用户培训,但它确实是最好的select。 另外,它给你版本控制的好处,所以你可以恢复错误。