views:

769

answers:

3

I have to admit that I always forgot the syntactical intracacies of the naming patterns for Nant (eg. those used in filesets). The double asterisk/single asterisk stuff seems to be very forgettable in my mind.

Can someone provide a definitive guide to the naming patterns?

A: 

Check out the Nant reference. The fileset patterns are:

'*' matches zero or more characters, e.g. *.cs
'?' matches one character, e.g. ?.cs

And '**' matches a directory tree e.g. src/**/*.cs will find all cs files in any sub-directory of src.

Andy Whitfield
A: 

I have read the reference. And re-read it. And re-read it. I just think it has a really poor set of examples and is unclear in its message.

berko
Maybe you can specify exactly what you're trying to achive and someone can provide a better answer?
Andy Whitfield
+9  A: 

The rules are:

  • a single star (*) matches zero or more characters within a path name
  • a double star (**) matches zero or more characters across directory levels
  • a question mark (?) matches exactly one character within a path name

Another way to think about it is double star (**) matches slash (/) but single star (*) does not.

Let's say you have the files:

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

Then the patterns:

  • *.c matches nothing (there are no .c files in the current directory)
  • src/*.c matches 2 and 3
  • */*.c matches 2 and 3 (because * only matches one level)
  • **/*.c matches 2, 3, and 4 (because ** matches any number of levels)
  • bar.* matches 1
  • **/bar.* matches 1 and 2
  • **/bar*.* matches 1, 2, and 4
  • src/ba?.c matches 2 and 3
benzado
I think that this is a much better explanation than the Nant reference. Cheers!
berko