unison:如何同步多个目录中的特定子文件夹?

unison: how to sync specific subfolders in several directories?

我正在尝试在两台机器(都是 ubuntu 16.04)之间同步我的目录的子集(版本 2.48.3)。在两台机器上,我都有一个名为 "research" 的目录。它包含我正在处理的每个项目的文件夹。在这些文件夹中的每一个中,都有一个名为 "lit" 的文件夹,我想同步所有这些 "lit" 文件夹,而不必真正关心项目名称本身。 示例:在两台机器上,都有以下文件夹:

/home/chris/research/projA/lit
/home/chris/research/projA/otherstuff
/home/chris/research/projB/lit
/home/chris/research/projB/otherstuff

其中我想在两台机器上同步 projA/lit,还有 projB/lit

我已经安装了 unison,并通过联机帮助页阅读了自己。基于此,我修改了 unison 配置文件 default.prf 如下:

# Unison preferences file
# used for syncing lit between work and home

# roots
root = /home/chris/research
root = ssh://pc-work//home/chris/research

# paths
path = */lit

当 unison 成功连接到我的工作计算机时,它没有找到任何要同步的东西。 如果相反,我将上面配置文件中的 path = */lit 替换为 path = projA/lit,就可以了。

因此,问题是:我是否可以同步所有项目的 lit 子文件夹而无需指定这些,如果可以,如何实现?或者我是否必须将 unison 命令包装在某种循环中才能遍历所有项目文件夹?

path 不是实现您想要的目标的正确方法。来自 path 上的 documentation

Note that path preferences are intepreted literally—they are not regular expressions.

即使您没有使用正则表达式,而是 shell glob,我认为上面的意思是 path 的值没有被 [=16= 特殊解释].

不过,您可以通过明智地使用 ignore and/or ignorenot 来达到您想要的效果。那些 do 允许 shell glob 或正则表达式。

例如,(免责声明:我还没有测试过)

ignore = Path proj*/otherstuff

对于同步时要跳过的任何目录。如果要跳过的目录多于要同步的目录,您也可以反过来指定它:

ignore = Path proj*/*
ignorenot = Path proj*/lit

请注意,如果您要同步的文件和目录已经在您指定的root下,则不需要设置path