usan usa tipos son representar qué que punto para los internet comodines comodin carácter caracter busqueda buscadores unix

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, **/foo coincide con el archivo o directorio foo cualquier lugar, igual que el patrón foo . **/foo/bar coincide con el archivo o la bar directorio en cualquier lugar que esté directamente debajo del directorio foo .

  • Un final /** coincide con todo lo que hay dentro. Por ejemplo, abc/** coincide con todos los archivos dentro del directorio abc , 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/**/b coincide con a/b , a/x/b , a/x/y/b y así sucesivamente.

  • Otros asteriscos consecutivos se consideran inválidos.