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
。
我正在尝试在两台机器(都是 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
。