3

我正在尝试在两台机器(均为 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 = */litpath = projA/lit它可以工作。

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

4

1 回答 1

3

path不是实现你想要的正确方法。从文档path

请注意,path首选项是按字面意思解释的——它们不是正则表达式。

即使您没有使用正则表达式,而是使用 shell glob,我认为上面的意思是 的值path不是由unison.

ignore但是,您可以通过明智地使用和/或来实现您所追求的效果ignorenot。那些确实允许 shell glob 或正则表达式。

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

ignore = Path proj*/otherstuff

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

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

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

于 2019-01-25T12:32:05.310 回答