忽略除一个子文件夹之外的目录中的所有内容

时间:2016-07-08 13:45:36

标签: regex regular-language unison

我有一个目录~/x7/music/sfx ~/x7/music的根目录中有一些文件和文件夹 我只需要同步sfx文件夹并忽略music中的任何其他内容。

我尝试了很多变种,但都错了。

ignore = Name music/*
ignorenot = Regex music/sfx/.* (OR just *)

不起作用。

我期待使用像

这样的东西
ignore = Name music/*^/

3 个答案:

答案 0 :(得分:1)

我不熟悉unison,但要忽略除sfx之外的所有事情,你可以使用

ignore = Regex /root/path/to/music/.*
ignorenot Regex /root/path/to/music/sfx/.*

Documentation Source

  

还有一个ignorenot首选项,它指定了一组   路径的模式,即使它们匹配,也不应忽略   忽略模式。但是,这两组模式的相互作用   可能有点棘手。以下是它的工作原理:

     
      
  • Unison开始从副本的根目录检测更新,即从空路径开始。如果空路径与ignore模式匹配,则   与ignorenot模式不匹配,那么整个副本将是   忽略。 (因此,包含Name *不是一个好主意   作为ignore模式。如果你想忽略除了a之外的所有东西   某些文件集,请使用Name ?*.

  •   
  • 如果root是目录,Unison将继续在根目录的所有直接子节点中查找更新。再说一次,如果名字的话   子项匹配ignore模式且与ignorenot不匹配   模式,然后这整个路径包括它下面的一切   忽略。

  •   
  • 如果任何未被忽略的子项是目录,则该过程将以递归方式继续。

  •   

答案 1 :(得分:1)

遵循unison的文档,如果某个路径被忽略,那么其后的所有内容。因此,如果要忽略文件夹中除子文件夹之外的所有内容,则不应忽略文件夹本身,而应忽略其中的所有内容(不同),然后使用ignorenot

ignore = Path x7/music/?*
ignore = Path x7/music/.?*
ignorenot = Path x7/music/sfx

应该这样做。

关于那里使用的特定正则表达式,我再次遵循unison的文档建议:"因此,将Name *作为忽略包含在内并不是一个好主意图案。如果要忽略除特定文件集之外的所有内容,请使用Name ?*。" 第二条ignore行也会忽略music中隐藏的文件/文件夹,如果您需要的话。

答案 2 :(得分:0)

在2.48.3上,这应该起作用:

ignore = Path /root/path/to/music/*
ignorenot = Path /root/path/to/music/sfx