如果我有文件夹 A 和 B,是否可以将新文件从 A 同步到 B 并且不删除在 A 中删除的 B 文件?
也就是说,我想将B用作任何文件的大容器,包括我曾经从A同步并删除的那个。我认为被认为是一种“单向同步”。
如果我有文件夹 A 和 B,是否可以将新文件从 A 同步到 B 并且不删除在 A 中删除的 B 文件?
也就是说,我想将B用作任何文件的大容器,包括我曾经从A同步并删除的那个。我认为被认为是一种“单向同步”。
我了解到您对 Unison 有这两个要求
镜像
根据 Unison手册,该-force xxx
选项“有效地将 Unison 从同步器更改为镜像实用程序”。该force
选项将首选文件夹作为参数。Unison 将解决所有有利于此文件夹的更改。
镜像的命令行,例如,文件夹/src/dir
将/dest/dir
是
unison /src/dir /dest/dir -force /src/dir
保存
使用该选项-nodeletion xxx
可防止 Unison 建议对文件夹进行任何删除xxx
作为默认操作。
/dest/dir
删除文件后保留文件的命令行/src/dir
是
unison /src/dir /dest/dir -nodeletion /dest/dir
总结
因此,总的来说,您希望使用以下两个选项运行 Unison 以满足您的要求:
unison /src/dir /dest/dir -force /src/dir -nodeletion /dest/dir
笔记
在您将 Unison 设置为以批处理模式运行之前,我建议您使用图形 UI 以交互模式运行 Unison。使用图形 UI 更方便,因为您可以看到所有待处理的更改,包括 Unison 建议的默认操作。
当您对默认操作感到满意时,您可以-batch
使用文本 UI 以批处理模式(选项)运行一致。在批处理模式下,将接受具有默认操作的更改,将跳过没有默认操作的更改(由于冲突)。
请记住,用户可以在交互模式下覆盖这些选项。它们绝不是对删除的绝对保护,它们只是为 Unison 提供有关如何决定默认操作的指导。在交互模式下,用户始终可以覆盖默认操作,即按“<”将更改传播到源文件夹(您不想要的方向)。
是的,您可能想要使用noupdate
和/或nodeletion
选项:
-nodeletion xxx prevent file deletions on one replica
-noupdate xxx prevent file updates and deletions on one replica
阅读手册中的完整说明。
如果其他人来这里寻找有关如何统一执行此操作的实际答案,您只需使用-force
源目录后跟的标志,例如
unison /source/dir /destination/dir -force /source/dir
这将确保无论对目标进行什么更改,目标都将与源匹配。
顺便说一句,unison
比rsync
当您在数百万个文件中散布大量数据而其中只有少数文件发生变化时要快得多。
我会说:
source=A
target=B
unison $source $target -batch -nocreation $source -noupdate $source -force $source
是的,不要使用同音。只需使用rsync
. 如果您想变得花哨,您可以使用cron
来安排rsync
运行时间,或用于inotify-tools
监视文件夹 A 中的更改并在更改发生时准确同步。