Tengo esta estructura de directorio:
~/tmp/globstar ɀ find dir -type f
dir/file.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
y, con la globstar
opción habilitada en Bash, puedo decir:
~/tmp/globstar ɀ ls -1 dir/**/*.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
Mi pregunta es: ¿por qué está dir/file.ext
excluido de esta lista?
El manual de Bash dice esto sobre globstar
:
Si se establece, el patrón '**' utilizado en un contexto de expansión de nombre de archivo coincidirá con todos los archivos y cero o más directorios y subdirectorios. Si el patrón es seguido por un '/', solo coinciden los directorios y subdirectorios.
" Cero " en este párrafo me deja con la impresión de que dir/file.ext
debería haberse incluido; a menos que espero que me falte algo.
ɀ
?unicode ɀ
o Wikipediaɀ
es solo un carácter utilizado aquí para distinguir prompt. Algunos usuarios prefieren el personaje£
o en€
lugar de$
:). Originalmente,ɀ
un carácter 'z' creado para una notación especial de idioma africano :-)Respuestas:
Supongo que eso se refiere solo al nivel del subdirectorio.
**
sin/
fósforostodos los archivos y directorios
cero o más subdirectorios
Pero no desaparece por completo.
**/
significa que no hay archivos en el directorio de nivel más alto que**
correspondan.Es necesario
dir/*.ext dir/**/*.ext
.fuente
Esto funciona como esperaba en estas versiones de Bash que se proporcionan con las distribuciones enumeradas:
De hecho, las versiones enumeradas anteriormente son todo lo que probé. En otras palabras, no encontré una versión 4 de Bash donde no funciona. La opción
globstar
se agregó en Bash 4.0 ver CAMBIOS . En versiones anteriores, el comandoshopt -s globstar
debería devolver un error.Pruebas
1.
dir/**/*.ext
coincidenciasdir/file.ext
:2.
**/*.ext
partidosfile.ext
:Preparación del entorno para reproducir las pruebas anteriores:
fuente
shopt -s globstar
.Me mira como si tuvieras / tuvieras globstar apagado. Se puede activar así:
No solo no coincidirá con cero subdirectorios, sino que tampoco coincidirá con dos subdirectorios:
Con globstar apagado, ** termina comportándose como *, por lo que
dir/**/*.ext
obtiene el mismo resultado quedir/*/*.ext
lo que a veces me hace pensar que Globstar está encendido
compruebe su configuración actual de globstar de esta manera:
fuente
shopt globstar
.