Synchronization Unison:仅在一个方向上同步

Synchronization Unison:仅在一个方向上同步,synchronization,unison,Synchronization,Unison,如果我有文件夹A和B,是否可以将新文件从A同步到B,并且不在B中擦除在A中擦除的文件 也就是说,我想使用B作为任何文件的大容器,包括我曾经从a同步并删除的文件。我认为这是一种“单向同步”。是的,不要使用unison。只需使用rsync。如果您想了解更多,可以使用cron计划rsync何时运行,或者使用inotify工具监视文件夹A中的更改,并在更改发生时精确同步 是的,您可能希望使用noupdate和/或nodeletion选项: -节点删除xxx防止在一个复制副本上删除文件 -noupdat

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


也就是说,我想使用B作为任何文件的大容器,包括我曾经从a同步并删除的文件。我认为这是一种“单向同步”。

是的,不要使用unison。只需使用
rsync
。如果您想了解更多,可以使用
cron
计划
rsync
何时运行,或者使用
inotify工具
监视文件夹A中的更改,并在更改发生时精确同步

是的,您可能希望使用
noupdate
和/或
nodeletion
选项:

-节点删除xxx防止在一个复制副本上删除文件
-noupdate xxx防止在一个复制副本上更新和删除文件


阅读。

中的完整描述。如果有其他人来这里寻找有关如何使用unison执行此操作的实际答案,您只需使用
-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

我知道你对Unison有这两个要求

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

根据Unison,强制xxx选项“有效地将Unison从同步器更改为镜像实用程序”。
force
选项将要使用的文件夹作为参数。Unison将解决所有有利于此文件夹的更改

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

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

使用选项
-nodeletion xxx
防止Unison建议将文件夹
xxx
上的任何删除作为默认操作

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

unison /src/dir /dest/dir -force /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。使用图形用户界面更方便,因为您可以看到所有挂起的更改,包括Unison建议的默认操作

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


请记住,用户可以在交互模式下覆盖这些选项。它们绝不是针对删除的绝对保护,它们只是为Unison提供关于如何决定默认操作的指导。在交互模式下,用户始终可以覆盖默认操作,即,按“我建议先尝试上述命令,但不带标记
-batch
,这样您就可以在unison实际执行之前看到它将要执行的操作。注意:与问题中提出的要求相反(“在B中不擦除在A中擦除的文件”),此答案确实会将删除内容传播到目标。抱歉,在我自己尝试此确切设置之前,我对此答案进行了升级。似乎我无法删除升级。我的错误。为了弥补错误,我在下面提供了我自己的答案。谢谢。正确的命令行必须是
unison/source/dir/destination/dir-force/source/dir
抱歉,小伙子们,我还编辑了此答案以更正其中的错误,并在更正后对其进行了升级。但是,我的编辑已被拒绝。因此,此错误答案未被更正(我不能对其进行降级)。手册中说:
包括首选项-强制根本原因导致Unison解决所有差异(即使是不冲突的更改)支持root
。那么为什么还要麻烦使用
-nodeletion
?@TomHale因为没有它,冲突“文件存在于
/dest/dir
中,但不存在于
/src/dir
”也将得到解决,支持
/src/dir
(这意味着“
/src/dir
是正确的”),有效地在
/dest/dir
中删除它