Jak używać wzorców nazewnictwa Nant / Ant?

99

Muszę przyznać, że zawsze zapominałem o składniowych zawiłościach wzorców nazewnictwa dla Nanta (np. Używanych w zestawach plików). Wydaje mi się, że rzeczy z podwójną gwiazdką / pojedynczą gwiazdką są bardzo trudne do zapomnienia.

Czy ktoś może podać ostateczny przewodnik po wzorcach nazewnictwa?

berko
źródło
3
Przeczytałem odniesienie. I przeczytaj to ponownie. I przeczytaj to ponownie. Po prostu myślę, że ma naprawdę ubogi zestaw przykładów i jest niejasny w swoim przesłaniu.
berko
Może potrafisz dokładnie określić, co chcesz osiągnąć, i ktoś może udzielić lepszej odpowiedzi?
Andy Whitfield,

Odpowiedzi:

240

Zasady są następujące:

  • pojedyncza gwiazdka (*) oznacza zero lub więcej znaków w nazwie ścieżki
  • podwójna gwiazdka (**) oznacza zero lub więcej znaków na różnych poziomach katalogu
  • znak zapytania (?) oznacza dokładnie jeden znak w nazwie ścieżki

Innym sposobem myślenia o tym jest podwójna gwiazda (**) dopasowuje ukośnik (/), ale pojedyncza gwiazdka (*) nie.

Powiedzmy, że masz pliki:

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

Następnie wzory:

  • *.c             nic nie pasuje (w bieżącym katalogu nie ma plików .c)
  • src/*.c     pasuje do 2 i 3
  • */*.c         pasuje do 2 i 3 (ponieważ * pasuje tylko do jednego poziomu)
  • **/*.c       pasuje do 2, 3 i 4 (ponieważ ** pasuje do dowolnej liczby poziomów)
  • bar.*         mecze 1
  • **/bar.*   pasuje do 1 i 2
  • **/bar*.* pasuje do 1, 2 i 4
  • src/ba?.c pasuje do 2 i 3    
benzado
źródło
5
Myślę, że jest to znacznie lepsze wyjaśnienie niż odniesienie do Nanta. Twoje zdrowie!
berko,
1
Do czego pasuje src / * / **? Spodziewałbym się, że będzie to 4, ale moje doświadczenie z maven wydaje się wskazywać, że dopasowujesz dowolne pliki w dowolnych potrzebnych folderach src / * / * / **
Matthew Buckett
1
co by **.cpasowało?
chharvey
3
Nie używam już Ant, więc nie jestem w stanie odpowiadać na dodatkowe pytania. Powinieneś zadać nowe pytanie lub jeszcze lepiej znaleźć odpowiedź, a następnie przesłać poprawkę do mojej odpowiedzi.
benzado
1
@sitaktif Można o tym myśleć w bar.txtsposób niejawny ./bar.txt( .oznacza bieżący katalog). Tak, że lista jest naprawdę ./bar.txt, ./src/bar.citp i ./zakłada.
benzado,
16

Oto kilka dodatkowych dopasowań wzorców, które nie są tak oczywiste w dokumentacji. Testowane przy użyciu NAnt dla przykładowych plików w odpowiedzi benzado:

  • src**                      pasuje do 2, 3 i 4
  • **.c                        pasuje do 2, 3 i 4
  • **ar.*                    pasuje do 1 i 2
  • **/bartest.c/**  zapałki 4
  • src/ba?.c/**        pasuje do 2 i 3
świeca
źródło
2
mała uwaga: z mrówką (1.8.2) **. c nie zastępuje ** / *. c
nonsenz
4

Podwójne gwiazdki ( **) są powiązane z dopasowywaniem nazw folderów, podczas gdy pojedyncze symbole gwiazdka ( * = multi characters) oraz znak zapytania ( ? = single character) są używane do dopasowywania nazw plików.

Aditya Kumar Shrivastava
źródło
3

Sprawdź referencje Nant . Wzorce zestawu plików to:

„*” oznacza zero lub więcej znaków, np. * .cs
'?' dopasowuje jeden znak, np.? .cs

A „**” oznacza drzewo katalogów, np. Src / ** / *. Cs znajdzie wszystkie pliki cs w dowolnym podkatalogu src.

Andy Whitfield
źródło