Wildcards (extended globbing)
Los wildcards (comodines) en Bash suelen ser referenciados como expansión de nombres/directorios y a veces como globbing.
La expansión de nombres de ficheros o directorios expande las sintaxis *,
?
o [...]
cuando se usan como parte de un comando, por ejemplo:
$ ls *.jpg # Lista todos los ficheros JPEG $ ls ?.jpg # Lista ficheros JPEG cuyo nombre sea un carácter (ej: a.jpg, 1.jpg) $ rm [A-Z]*.jpg # Borra ficheros JPEG cuyo nombre empiece por una letra en mayusculas
* Coincide con cero o más caracteres ? Coincide cualquier único caracter [...] Coincide cualquier de los caracteres en el conjunto
Esta expansión está realizada por Bash, no por el sistema operativo o el comando que se ejecute.
Además de los wildcards anteriores se pueden activar los extendidos mediante:
shopt -s extglob
Si queremos ver el estado:
$ shopt | egrep extglob extglob on
Esto nos habilita los siguientes wildcards extendidos:
?(pattern-list) Coincide con cero o una ocurrencia de los patrones dados *(pattern-list) Coincide con cero o más ocurrencias de los patrones dados +(pattern-list) Coincide con una o más ocurrencias de los patrones dados @(pattern-list) Coincide con una ocurrencia de los patrones dados !(pattern-list) Coincide con cualquiera que no sea una de las ocurrencias de los patrones dado
Ejemplos:
$ ls *.pdf ee.pdf e.pdf .pdf $ ls ?(e).pdf # cero o una "e" permitida e.pdf .pdf $ ls *(e).pdf # cero o más "e"s permitidas ee.pdf e.pdf .pdf $ ls +(e).pdf # una o más "e"s permitida ee.pdf e.pdf $ ls @(e).pdf # solo una "e" permitida e.pdf $ ls ?(*.jpg|*.gif) # jpg y/o gif a.jpg b.gif $ ls !(*.jpg|*.gif) # ni jpg ni gif c.png d.pdf ee.pdf
Estos wildcard extendidos se pueden usar en un if
después de un ==
, en un patrón de un case
y en una expansión de parámetros %, %%, #, ##, /, //
.