![Unison:忽略所有带有 *.ext 的文件,除了特定子目录中的文件](https://linux22.com/image/88184/Unison%EF%BC%9A%E5%BF%BD%E7%95%A5%E6%89%80%E6%9C%89%E5%B8%A6%E6%9C%89%20*.ext%20%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E9%99%A4%E4%BA%86%E7%89%B9%E5%AE%9A%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6.png)
我正在尝试使用 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