排除文件夹下的所有内容*但*某些文件类型(在任何嵌套级别)

Exclude everything under folder *but* certain filetypes (at any nesting level)

使用版本 2.51.2 (ocaml 4.04.0)。

尝试排除根文件夹(称为构建),但包含任何以 .err 和 .out 结尾的文件在其下方的任何深度。

结构看起来像

build/a/b/c/test/1.0/test.out
build/a/d/whatever/2.0/whatever.err
build/a/test.err

我试过了

ignore = Path build
ignorenot = Regex·arnold-build\/(.*).(err|out)⬎

...这会引发 "Malformed pattern" 错误。还尝试仅与此显式同步整个子目录:

ignorenot = Path a/b/c/test/

但是 "test" 文件夹仍然不同步。

如何只同步所有 .err/.out 文件,而忽略其他所有文件?

Unison 的 "ignorenot" 偏好有点违反直觉

https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#ignore

如果一个目录被忽略,它的所有后代也将被忽略,该树下的所有内容都将被忽略并且不再检查。

Ignorenot only blocks ignores at the same level,所以你必须用成对的ignore和ignorenot覆盖所有的树,直到你想要应用的ignorenot。例如,在你上面引用的情况下,如果你想忽略构建中的所有内容,除了 build/a/b/c/test、build/a/d/whatever、 和它们里面的所有内容,你的首选项配置文件应包括:

ignore = Path build/*
ignorenot = Path build/a
ignore = Path build/a/*
ignorenot = Path build/a/b
ignorenot = Path build/a/d
ignore = Path build/a/b/*
ignore = Path build/a/d/*
ignorenot = Path build/a/b/c
ignorenot = Path build/a/d/whatever
ignore = Path build/a/b/c/*
ignorenot = Path build/a/b/c/test

这样 Unison 将忽略构建文件夹中的所有内容,除了 build/a/d/whatever 和 build/a/b/c/test