我有两个目录,一个是另一个的副本。在我的例子中,每个目录都在自己的外部硬盘上,但我想要做的事情应该普遍适用于两个应该相同的目录。现在我想同步这两个目录。我希望具有以下功能:
- 理想情况下,它应该是双向同步,而不仅仅是一个目录为主目录,另一个为从目录。也就是说,它应该能够说“从 A 中获取这个子目录,从 B 中获取那个子目录”。(这有意义吗?)
- 在我命令进行同步之前,我想看看每个目录中会发生什么变化。
- 假设我有一个目录 A。为了备份,我将目录复制到目录 B(例如,另一个硬盘上)。经常发生的情况是,我在某个地方有一个混乱的子文件夹,例如名为“存档”,我在其中转储了许多文件。当然,目录 B 中此子文件夹的备份也很混乱。有一天,我清理了 A 中此“存档”中的文件 - 通常是将文件放在 A 目录树中的正确位置(“存档”子文件夹以外的某个地方)。稍后,我想将整个目录树 A 与其备份(即 B)同步。使用类似工具将发生的情况
rsync
是,B 中的子文件夹“存档”被删除,这些文件从 A 中的正确位置复制到 B 中的正确位置。如果将文件从 B 中的“存档”移动到正确位置,就像我之前手动为 A 所做的那样,这不是更合理吗?在同步之前查看这些移动会很棒。
我正在使用 Linux Kubuntu,两个目录都在 ext4 分区上。
问题在Linux PC上同步两个目录类似,但又不完全相同。
我的第三个要求是我最重要的/最难满足的。如果你能找到解决方案,我会非常高兴 :-)。
请考虑一下,我的目录树相当大 - 无论是大小(约 4TB)还是文件数量(介于 1 亿到 10 亿个文件之间)。所以如果我使用像 git 这样的工具......我想那可能行不通。
答案1
你可以尝试免费文件同步同步两个目录。它会在源目录和目标目录中的小文件 sync.ffs_db 中跟踪您的目录结构,并且,它可以检测移动和重命名的文件和目录,并在源目录和目标目录中移动它们,从而节省完全重新同步的带宽。
答案2
我建议使用齐奏。Unison 旨在双向同步文件夹结构,包括文件删除。我不知道如何强制 Unison 仅显示要传输的内容。除此之外,它非常适合您的用例。
编辑:根据https://en.wikipedia.org/wiki/Comparison_of_file_synchronization_software可以识别重命名或移动。