Unison:只在一个方向上同步

Unison: sync only in one direction

如果我有文件夹 A 和 B,是否可以将新文件从 A 同步到 B 并且在 A 中删除的文件不在 B 中删除?

也就是说,我想将B用作任何文件的大容器,包括我曾经从A同步然后删除的文件。我觉得算是"one way syncing".

是的,不要使用齐奏。只需使用 rsync。如果你喜欢花哨的,你可以使用 cron 来安排 rsync 获得 运行 的时间,或者使用 inotify-tools 来观察文件夹 A 中的变化并准确同步变化发生。

是的,您可能想使用 noupdate and/or nodeletion 选项: -nodeletion xxx prevent file deletions on one replica -noupdate xxx prevent file updates and deletions on one replica

阅读 manual 中的完整说明。

如果其他人来这里寻找有关如何使用 unison 执行此操作的实际答案,您只需使用 -force 标志和源目录,例如

unison /source/dir /destination/dir -force /source/dir

这将确保无论对目标进行什么更改,目标都将与源匹配。

顺便说一句,当您的大量数据分布在数百万个文件中而只有少数文件发生变化时,unisonrsync 快得多。

我会说:

source=A
target=B
unison $source $target -batch -nocreation $source -noupdate $source -force $source

我了解到您对 Unison 有这两个要求

  • 将文件夹 A 镜像到 B 并且
  • 在 B 上保存数据

镜像

根据 Unison manual-force xxx 选项 "effectively changes Unison from a synchronizer into a mirroring utility"。 force 选项将要收藏的文件夹作为参数。 Unison 将解决所有有利于此文件夹的更改。

要镜像的命令行,例如,文件夹 /src/dir/dest/dir 将是

unison /src/dir /dest/dir -force /src/dir

保存

使用选项 -nodeletion xxx 以防止 Unison 建议对文件夹 xxx 进行任何删除操作作为默认操作。

/src/dir 中删除文件后在 /dest/dir 上保留文件的命令行是

unison /src/dir /dest/dir -nodeletion /dest/dir

总结

总的来说,你想要 运行 统一这两个选项来满足你的要求:

unison /src/dir /dest/dir -force /src/dir -nodeletion /dest/dir

备注

在您以批处理模式将 Unison 设置为 运行 之前,我建议使用图形 UI 在交互模式下将 Unison 设置为 运行。使用图形 UI 更方便,因为您会看到所有未决的更改,包括 Unison 建议的默认操作。

当您对默认操作感到满意时,您可以使用文本 UI 在批处理模式(选项 -batch)中 运行 齐奏。在批处理模式下,将接受具有默认操作的更改,将跳过没有默认操作(由于冲突)的更改。

请记住,用户可以在交互模式下覆盖这些选项。它们绝不是防止删除的绝对保护,它们只是为 Unison 提供有关如何决定默认操作的指导。在交互模式下,用户始终可以覆盖默认操作,即按“<”将更改传播到源文件夹(您不想要的方向)。