11

我正在使用 Mercurial,并且具有以下结构:

files
   test
       demo.jpg
       video.flv
       video.doc

   sport
       demo2.jpg
       picture.jpg
       text.txt
demo3.jpg
demofile3.doc

我想做一个全局过滤器,它只忽略所有目录中的所有“jpg”文件,这些文件是“files”目录的子目录

我尝试使用 files/*.jpg 但它不起作用。

任何意见,将不胜感激。

4

3 回答 3

16

正则表达式解决方案


这对我有用..

syntax: regexp
files/.*/.*jpg


您自己的解决方案看起来更像是一个 glob。诀窍是使用 ** 语法来允许子目录。看到这个...

全局解决方案


这个球对我也有用

**/files/**/*.jpg


注释

就我个人而言,我总是使用 glob syntx 来解决这类问题。一旦您了解了 ** 语法,就可以比正则表达式更容易地遵循该模式试图做的事情。

于 2010-07-22T07:52:02.710 回答
12

如果您乐于忽略“任何名为files”的目录中的所有 JPG 文件,请使用

syntax: glob
files/**.jpg

看看hg help patterns哪个解释了这**是一个跨越目录分隔符的全局运算符。这意味着该文件

 files/test/demo.jpg

由 匹配files/**.jpg

但是,请注意 glob 模式不是rooted。这意味着一个名为

 test/files/demo.jpg

也将被忽略,因为它在您删除test/前缀后匹配模式。

如果您对此感到担忧,则需要使用正则表达式。在该语法中,模式读取

syntax: regex
^files/.*\.jpg

我通常不会担心模式的根源——我更喜欢 glob 模式的简单性。但是很高兴知道如果您真的需要,您可以根植忽略模式。

于 2010-07-22T13:26:11.393 回答
0

它必须是全局语法吗?如果您使用正则表达式语法,files/.*\.jpg应该可以。

于 2010-07-22T07:40:17.307 回答