下面是我想整理的Linux下的文件管理问题。这不完全是版本控制的问题,而是计算机之间同步的问题。
情况
有三台计算机(例如 A、B、C)。
这些计算机并不总是同时打开
这些计算机可以使用 NFS 协议快速相互连接
通常但不严格地说,计算机的使用目的不同。
我已将大量文件(二进制文件和纯文本)分类到三个目录树中:dir-A、dir-B、dir-C。作为起点,这三棵树位于每个三台计算机中的。更多详情
- dir-A 包含我在计算机 A 上使用时通常处理的文档;
- dir-A 也仅在计算机 A 上备份;
- 的版本计算机 A 中的 dir-A应该是“主副本”。其他计算机中的同名副本是为了方便和冗余而存在的。
- 同样,对于其他两对目录和计算机。
顺便说一句,文档分类非常好,因为我可以从命令行快速检索目录和文件。因此,我想坚持使用命令行和脚本,而不是借助打包软件来管理库。
意图
情况变得更加复杂,因为有时,当 B 和 C 关闭时在计算机 A 上工作时,
- 我收到符合 dir-B 和 dir-C 中类别的新文档,因此我将它们存储在它们的本地副本中;
- 我可能会在本地断断续续地重新排列 dir-B 和 dir-C 的内容以改进分类。这将归结为创建、删除、重命名、合并子目录、移动文件、删除混乱等等。
然而,目的是 dir-B (dir-C) 的“主副本”必须位于计算机 B (C) 中。因此,在选定的时刻,计算机 A 上所做的修改需要转移到计算机 B (C) 上。
最后,当我在 B 和 C 中编辑 dir-A 的便捷副本时,这也应该适用。
问题
我正在考虑在给定的限制条件下具有最大灵活性的最佳策略。任务 1 是一个简单的同步问题(我会使用rsync
),但任务 2 更复杂。
因此,我想知道
- Linux 中是否有可以用来实现任务 1 和 2 的工具/实用程序?
- 你会如何解决这个问题?
- 问题能真正得到解决吗?
- 也许我应该放弃任何限制以使其可行?
答案1
这并不完全是 Unix/Linux 问题,您可以在任何操作系统上以任何复杂程度来完成此问题。
让我重申一下你的问题:
- {1您有 N 台计算机,它们在任何给定时刻可能会或可能不会相互连接,通常被认为包含 1 个主机和多个从机
- {2随着时间的推移,这些计算机上的资源会不同步、重命名等。
- {3您一次在一台计算机上工作
- {4您想要重新同步计算机
解决方案:
{1意味着当至少有两台计算机连接时,您需要以固定时间间隔运行批量协调作业。
{2意味着您必须跟踪重命名、重新分类等才能找到匹配的资源
{3} 得出这样的结论:权威记录是通过比较计算机之间的修改时间找到的。
能够比较交易时间以找到最新、权威记录的关键先决条件是所有 N 台计算机上都有准确的时钟。
NTP
是你的朋友吗?修改记录由机制提供
inotify
。在识别出 N 个文件列表中的冲突记录后,可以决定将哪些内容移动到哪里。我推荐 GNU
datamash
作为这项任务的早期候选者。移动文件是最简单的任务。
rsync
足够多才多艺。
最后,由于我没有为此付费,所以我将把编写脚本的平凡任务留给读者作为练习。