我该如何使用Nant/Ant命名模式?

121

我必须承认,我总是会忘记Nant命名模式(例如在文件集中使用的模式)的语法细节。双星号/单星号的东西似乎在我的脑海中容易被遗忘。

是否有人可以提供一个权威指南来解释这些命名模式?


4
我已经阅读了这个参考资料。并且重新阅读了它。还有再次阅读。我认为它的示例非常糟糕,信息表达也不太清晰。 - berko
也许你可以明确你想要实现的目标,这样别人就能提供更好的答案了? - Andy Whitfield
4个回答

290
规则如下:
  • 单个星号 (*) 匹配路径名中的零个或多个字符
  • 双星号 (**) 匹配跨目录级别的零个或多个字符
  • 问号 (?) 匹配路径名中的一个字符

另一种理解方式是,双星号 (**) 匹配斜杠 (/),但是单个星号 (*) 不匹配。

假设你有以下文件:

  1. bar.txt
  2. src/bar.c
  3. src/baz.c
  4. src/test/bartest.c

那么以下模式将匹配相应的文件:

  • *.c             不匹配任何文件(当前目录中没有 .c 文件)
  • src/*.c     匹配 2 和 3
  • */*.c         匹配 2 和 3(因为 * 只匹配一层)
  • **/*.c       匹配 2、3 和 4(因为 ** 匹配任意级数)
  • bar.*         匹配 1
  • **/bar.*   匹配 1 和 2
  • **/bar*.* 匹配 1、2 和 4
  • src/ba?.c 匹配 2 和 3

10
我认为这个解释比Nant参考资料好得多。干杯! - berko
1
src//* 匹配什么?我本来以为它会匹配4个文件,但我的maven经验表明,你需要匹配任何文件夹中的任何文件 src///**。 - Matthew Buckett
3
**.c 会匹配什么? - chharvey
3
我不再使用 Ant,因此无法回答后续问题。你应该提出一个新的问题,或者更好的办法是找到答案并提交编辑我的回答。 - benzado
1
@sitaktif 一种思考方式是 bar.txt 隐含了 ./bar.txt (. 表示当前目录)。因此,该列表实际上是 ./bar.txt./src/bar.c 等等,而 ./ 是默认的。 - benzado
显示剩余5条评论

24

以下是一些在文档中不太明显的模式匹配。此示例使用benzado答案中的文件并使用NAnt进行了测试:

  1. bar.txt
  2. src/bar.c
  3. src/baz.c
  4. src/test/bartest.c
  • src**                      匹配2,3和4
  • **.c                        匹配2,3和4
  • **ar.*                    匹配1和2
  • **/bartest.c/** 匹配4
  • src/ba?.c/**       匹配2和3

4
注意:使用 ant (1.8.2) ,*.c 不是 */*.c 的替代品。 - nonsenz

5
双星号(**)与匹配文件夹名称相关联,而单个星号(* = 多个字符)以及问号(? = 单个字符)用于匹配文件名。

4
请查看Nant参考文档。文件集模式如下:

'*'匹配0个或多个字符,例如*.cs
'?'匹配1个字符,例如?.cs

而 '**' 匹配一个目录树,例如src/**/*.cs将会在src的任何子目录中找到所有的cs文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接