我有一个文件服务器,它负责每天从多个工作站提取文件夹树。我目前的方法是使用 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。这可能需要一些额外的用户培训,但这确实是最好的选择。此外,它还为您提供版本控制的好处,以便您可以恢复错误。