我正在尝试使用 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