usa - ¿Unix comodines selectores?(Asteriscos)
tipos de comodines (3)
En Railscast sobre git de Ryan Bates, su archivo .gitignore contiene la siguiente línea:
tmp/**/*
¿Cuál es el propósito de usar los asteriscos dobles seguidos por un asterisco como tal: **/* ? ¿El uso de simplemente tmp/* lugar de tmp/**/* no lograría exactamente el mismo resultado?
Buscando en Google el problema, encontré un artículo poco claro de IBM al respecto y me preguntaba si alguien podría aclarar el problema.
De http://blog.privateergroup.com/2010/03/gitignore-file-for-android-development/ :
(Kwoods)
"The double asterisk (**) is not a git thing per say, it’s really a linux / Mac shell thing.
It would match on everything including any sub folders that had been created.
You can see the effect in the shell like so:
# ls ./tmp/* = should show you the contents of ./tmp (files and folders)
# ls ./tmp/** = same as above, but it would also go into each sub-folder and show the contents there as well."
Dice que debe ir a todos los subdirectorios debajo de tmp, así como solo el contenido de tmp.
por ejemplo tengo los siguientes
$ find tmp
tmp
tmp/a
tmp/a/b
tmp/a/b/file1
tmp/b
tmp/b/c
tmp/b/c/file2
salida coincidente:
$ echo tmp/*
tmp/a tmp/b
salida coincidente:
$ echo tmp/**/*
tmp/a tmp/a/b tmp/a/b/file1 tmp/b tmp/b/c tmp/b/c/file2
Es una característica predeterminada de zsh, para que funcione en bash 4, realiza:
shopt -s globstar
Según la documentación de gitignore , esta sintaxis es compatible desde la versión 1.8.2 de git.
Aquí está la sección correspondiente:
Dos asteriscos consecutivos (
**) en patrones que coincidan con el nombre de ruta completo pueden tener un significado especial:
Un encabezado
**seguido de una barra diagonal significa coincidir en todos los directorios. Por ejemplo,**/foocoincide con el archivo o directoriofoocualquier lugar, igual que el patrónfoo.**/foo/barcoincide con el archivo o labardirectorio en cualquier lugar que esté directamente debajo del directoriofoo.Un final
/**coincide con todo lo que hay dentro. Por ejemplo,abc/**coincide con todos los archivos dentro del directorioabc, en relación con la ubicación del archivo.gitignore, con profundidad infinita.Una barra seguida de dos asteriscos consecutivos y luego una barra coincide con cero o más directorios. Por ejemplo,
a/**/bcoincide cona/b,a/x/b,a/x/y/by así sucesivamente.Otros asteriscos consecutivos se consideran inválidos.