我想同步给定根目录下所有子目录的内容,但只同步根目录本身的几个文件。为此,我想使用指令忽略所有文件ignore
(保留所有子目录),然后使用指令重新添加我想保留的几个文件ignorenot
。为此,我尝试了以下两件事:
通过添加到我的个人资料,添加正则表达式以排除根目录中包含斜杠的任何条目
ignore = Regex ^(?!.*\/).*$
。但这会导致以下错误消息,没有进一步的解释:Malformed pattern "Regex ^(?!.*\/).*$"."
首先用 忽略所有内容,
ignore = Name ?*
然后用 重新添加每个包含斜杠的路径ignorenot = Path */*
,但这并没有按预期工作,因为不忽略目录是无法以这种方式工作的。
这看起来是一个非常简单的问题,但我却无法理解。
答案1
似乎无法完全按照您的意愿进行操作。当 Unison 同步文件和目录时,Unison 可以分辨出两者之间的区别,但 Unison 不会以不同的方式引用它们(例如,在/
目录或类似内容前加上前缀),以便用户对其中一个或另一个进行模式匹配。例如,如果您同步名为 的目录和root 下deer
名为 的文件,Unison 会将它们命名为phil
ROOT
new dir ----> ROOT/deer
new file ----> ROOT/phil
你无法区分ROOT/deer
和ROOT/phil
。不过这里有一些建议
path = deer
通过为每个目录在配置文件中添加一行来手动指定要同步的目录。我认为这是配置 Unison 的标准方法。然后对于根目录中您想要同步的任何文件,比如名为的文件phil
,您可以移动phil
到要同步的目录deer/synced-root-files/
,然后添加符号链接从该文件返回到你的根目录cd ROOT; ln -s ROOT/deer/synced-root-files/phil
在根目录中发明一个可以进行模式匹配的命名约定。例如,将所有文件命名为不想要同步类似的内容
ignore.phil
,并在您的 Unison 个人资料中添加一行ignore = Path ignore.*
。
以下是路径指定和忽略路径Unison 手册的各个部分,以便未来的读者可以轻松找到它。