¿Cómo utilizo los patrones de nomenclatura de Nant / Ant?

99

Debo admitir que siempre olvidé las intracacies sintácticas de los patrones de nomenclatura de Nant (por ejemplo, los que se usan en los conjuntos de archivos). El asunto del doble asterisco / asterisco simple parece ser muy olvidable en mi mente.

¿Alguien puede proporcionar una guía definitiva sobre los patrones de nombres?

berko
fuente
3
He leído la referencia. Y vuelva a leerlo. Y vuelva a leerlo. Simplemente creo que tiene un conjunto de ejemplos realmente pobre y no es claro en su mensaje.
berko
¿Quizás pueda especificar exactamente lo que está tratando de lograr y alguien pueda brindar una mejor respuesta?
Andy Whitfield

Respuestas:

240

Las reglas son:

  • una sola estrella (*) coincide con cero o más caracteres dentro de un nombre de ruta
  • una estrella doble (**) coincide con cero o más caracteres en los niveles de directorio
  • un signo de interrogación (?) coincide exactamente con un carácter dentro de un nombre de ruta

Otra forma de pensarlo es que la estrella doble (**) coincide con la barra inclinada (/), pero la estrella simple (*) no.

Digamos que tienes los archivos:

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

Luego los patrones:

  • *.c             no coincide con nada (no hay archivos .c en el directorio actual)
  • src/*.c     coincidencias 2 y 3
  • */*.c         coincide con 2 y 3 (porque * solo coincide con un nivel)
  • **/*.c       coincide con 2, 3 y 4 (porque ** coincide con cualquier número de niveles)
  • bar.*         coincidencias 1
  • **/bar.*   coincidencias 1 y 2
  • **/bar*.* coincide con 1, 2 y 4
  • src/ba?.c coincidencias 2 y 3    
benzado
fuente
5
Creo que esta es una explicación mucho mejor que la referencia de Nant. ¡Salud!
berko
1
¿Qué coincide src / * / **? Esperaría que fueran 4, pero mi experiencia con maven parece indicar que coincide con cualquier archivo en cualquier carpeta que necesite src / * / * / **
Matthew Buckett
1
¿Qué **.ccoincidiría?
chharvey
3
Ya no uso Ant, así que no estoy en condiciones de responder preguntas de seguimiento. Debería hacer una nueva pregunta o, mejor aún, encontrar la respuesta y luego enviar una edición a mi respuesta.
benzado
1
@sitaktif Una forma de pensarlo bar.txtes implícitamente ./bar.txt( .significa el directorio actual). De manera que la lista es realmente ./bar.txt, ./src/bar.c, etc., y el ./se supone.
benzado
16

Aquí hay algunas coincidencias de patrones adicionales que no son tan obvias en la documentación. Probado usando NAnt para los archivos de ejemplo en la respuesta de benzado:

  • src**                      coincidencias 2, 3 y 4
  • **.c                        coincide con 2, 3 y 4
  • **ar.*                    coincidencias 1 y 2
  • **/bartest.c/**  partidos 4
  • src/ba?.c/**        coincidencias 2 y 3
bujía
fuente
2
nota pequeña: con hormiga (1.8.2) **. c no reemplaza ** / *. c
nonsenz
4

Los asteriscos dobles ( **) están asociados con la coincidencia de los nombres de las carpetas, mientras que los símbolos individuales asterisco ( * = multi characters) y el signo de interrogación ( ? = single character) se utilizan para hacer coincidir los nombres de los archivos.

Aditya Kumar Shrivastava
fuente
3

Consulte la referencia de Nant . Los patrones de conjunto de archivos son:

'*' coincide con cero o más caracteres, por ejemplo, * .cs
'?' coincide con un carácter, por ejemplo,? .cs

Y '**' coincide con un árbol de directorios, por ejemplo, src / ** / *. Cs encontrará todos los archivos cs en cualquier subdirectorio de src.

Andy Whitfield
fuente