Come si utilizzano i modelli di denominazione Nant / Ant?


99

Devo ammettere che ho sempre dimenticato le complessità sintattiche dei modelli di denominazione per Nant (ad es. Quelli usati nei set di file). La roba doppio asterisco / singolo asterisco sembra essere molto dimenticabile nella mia mente.

Qualcuno può fornire una guida definitiva ai modelli di denominazione?


3
Ho letto il riferimento. E rileggilo. E rileggilo. Penso solo che abbia una serie di esempi davvero scadenti e non sia chiaro nel suo messaggio.
berko

Forse puoi specificare esattamente cosa stai cercando di ottenere e qualcuno può fornire una risposta migliore?
Andy Whitfield,

Risposte:


240

Le regole sono:

  • una singola stella (*) corrisponde a zero o più caratteri all'interno di un nome di percorso
  • una doppia stella (**) corrisponde a zero o più caratteri nei livelli di directory
  • un punto interrogativo (?) corrisponde esattamente a un carattere all'interno di un nome di percorso

Un altro modo di pensarci è che la doppia stella (**) corrisponde alla barra (/) ma la singola stella (*) no.

Diciamo che hai i file:

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

Quindi i modelli:

  • *.c             non corrisponde a nulla (non ci sono file .c nella directory corrente)
  • src/*.c     corrisponde a 2 e 3
  • */*.c         corrisponde a 2 e 3 (perché * corrisponde solo a un livello)
  • **/*.c       corrisponde a 2, 3 e 4 (perché ** corrisponde a qualsiasi numero di livelli)
  • bar.*         corrisponde a 1
  • **/bar.*   corrisponde a 1 e 2
  • **/bar*.* corrisponde a 1, 2 e 4
  • src/ba?.c corrisponde a 2 e 3    

5
Penso che questa sia una spiegazione molto migliore rispetto al riferimento a Nant. Saluti!
berko

1
Cosa corrisponde a src / * / **? Mi aspetto che sia 4, ma la mia esperienza con Maven sembra indicare che abbini tutti i file in tutte le cartelle di cui hai bisogno src / * / * / **
Matthew Buckett

1
cosa **.ccorrisponderebbe?
Chharvey

3
Non uso più Ant, quindi non sono in grado di rispondere alle domande di follow-up. Dovresti fare una nuova domanda o, ancora meglio, trovare la risposta e quindi inviare una modifica alla mia risposta.
benzado

1
@sitaktif Un modo per pensarci bar.txtè implicitamente ./bar.txt( .significa la directory corrente). Quindi quella lista è davvero./bar.txt , ./src/bar.ce così via e la ./si assume.
benzado

16

Ecco alcune corrispondenze di pattern extra che non sono così ovvie dalla documentazione. Testato utilizzando NAnt per i file di esempio nella risposta di benzado:

  • src**                      corrisponde a 2, 3 e 4
  • **.c                        corrisponde a 2, 3 e 4
  • **ar.*                    corrisponde a 1 e 2
  • **/bartest.c/**  corrisponde a 4
  • src/ba?.c/**        corrisponde a 2 e 3

2
piccola nota: con formica (1.8.2) **. c non sostituisce ** / *. c
nonsenz

4

I doppi asterischi ( **) sono associati alla corrispondenza dei nomi delle cartelle, mentre i simboli singoli asterisco ( * = multi characters) e il punto interrogativo ( ? = single character) vengono utilizzati per abbinare i nomi dei file.


3

Controlla il riferimento a Nant . I modelli del set di file sono:

"*" corrisponde a zero o più caratteri, ad esempio * .cs
"?" corrisponde a un carattere, ad esempio? .cs

E '**' corrisponde a un albero di directory, ad esempio src / ** / *. Cs troverà tutti i file cs in qualsiasi sottodirectory di src.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.