Unison:忽略所有带有 *.ext 的文件,除了特定子目录中的文件

Unison:忽略所有带有 *.ext 的文件,除了特定子目录中的文件

我正在尝试使用 Unison (2.40.102) 执行同步,我想忽略具有特定扩展名的所有文件,例如*.ext,但不忽略具有此扩展名的文件(如果它们位于特定子文件夹中)。

文件夹结构:

main_dir
|file.ext
|...
|--sub_dir_1
   |more_files.ext
   |...
|--sub_dir_2
   |even_more_files.ext
   |...
   |--dir_I_want_to_sync
      |sync_this_file1.ext
      |...
      |sync_this_fileN.ext
      |--some_arbitrarily_named_dir
         |also_sync_this.ext
         |...
         |--more_arbitrarily_named_dirs_with_ext_files_in_them
            |...

由于文件夹结构不是恒定的,我不能只忽略特定路径,而必须非常普遍地执行此操作。我的想法是首先忽略所有具有扩展名的文件*.ext,然后取消忽略下面的那些dir_I_want_to_sync。但是,如果我找不到正确的命令......

我的配置文件的相关部分如下所示:

# Ignore all files with extension *.ext
ignore = Name {.,}*{.ext}

# Try to not ignore the files within the subdirectory (NOT WORKING)
ignorenot = Path */dir_I_want_to_sync/*             # 1)
ignorenot = Name */dir_I_want_to_sync/{*/}*{.ext}   # 2)

评论:
1)不做任何事情,因为文件被它们的文件忽略姓名,而不是它们的路径
2) 旨在反转对 中所有文件的忽略dir_I_want_to_sync,但它不会捕获所有子文件夹。

有没有办法将 应用于ignorenot = Name ...文件,无论它在目录结构中有多深,只要它位于具有特定名称的目录下面?

(我希望这不会太令人困惑。我很乐意澄清!)

答案1

当您需要匹配任意目录深度时,请使用Regex而不是。Path

ignore = Name *.ext
ignorenot = Regex .*/dir_I_want_to_sync/.*\.ext

相关内容