Está en la página 1de 4

5.

Secci
on 5: Usando wildcards (comodines)
Introduciendo comodines

En el uso diario de Linux, hay muchas ocaciones en que usted necesitara llevar a cabo alguna operacion simple (rm por ejemplo) en muchos elementos
del sistema de archivos simultaneamente. En estas situaciones, puede llegar
a ser tedioso y molesto tener que tipear cada uno de los archivos en la linea
de comandos:
$ rm arch1 arch2 arch3 arch4 arch5 arch6 arch6 arch8
Para resolver el problema recien mostrado, usted puede tomar ventaja del
soporte de comodines de Linux. Este soporte, tambien llamado globbing
(por historicas razones), le permite a usted especificar m
ultiples archivos
al mismo tiempo usando un patron de comodn (wildcard pattern). Bash y
otros comandos de Linux interpretaran este patron mirando en el disco y
encontraran los archivos que coincidan con el. As, si usted tiene archivos
arch1, arch2,...,arch8 en el directorio actual de trabajo, podra removerlos a
todos juntos tipeando:
$ rm arch[1-8]
O, si usted quisiera simplemente remover todos los archivos que comenzaran
con arch o que directamente se llamen arch, usted puede tipear:
$ rm arch*
El comodn * coincide con cualquier caracter o secuencia de caracteres, e incluso con ning
un caracter. Por supuesto, los comodines pueden ser usados
para muchas cosas ademas de un simple eliminado de archivos, como veremos
mas adelante.

Entendiendo las no-coincidencias (non-matches)


Si usted quisiera listar todos los objetos del sistema de archivos de /etc que
comiencen con g como as tambien que se llame solamente g, usted puede
tipear:
$ ls -d /etc/g*
/etc/gconf
/etc/ggi

/etc/gimp

/etc/gnome

/etc/gpm

Ahora, veamos que sucede su especificamos un patron que no coincide con


ning
un objeto de sistema de archivos. En el ejemplo siguiente, trataremos de
listar todos los archivos de /usr/bin que comiencen con asdf y termine con
jkl, incluyendo potencialmente el archivo asdfjkl:
22

$ ls -d /usr/bin/asdf*jkl
ls: /usr/bin/asdf*jkl: No such file or directory

Entendiendo las no-coincidencias, continuacion


Ah vimos que ocurre. Normalmente, cuando especificamos un patron, ese
patron coincide con uno o mas archivos del subyacente sistema de archivos,
y bash reemplaza el patron por una lista de todos los objetos coincidentes
separados entre si por espacios vacos. Sin embargo, cuando no se produce
ninguna coincidencia, bash deja el argumento con patron y todo, como es. As,
cuando ls no encuentra el archivo /usr/bin/asdf*jkl nos muestra el apropiado mensaje de error. La regla operativa aqu es que los patrones deben ser
expandidos solo si coinciden con elementos del sistema de archivos. De otro
modo, permancen como son y psan literalmente al programa con que fueron
llamados.

Sintaxis de comodines: *
Ahora que hemos visto como trabajna el englobamiento (globbing) hecharemos una mirada a la sitaxis de los comodines. Usted puede usar caracteres
especiales para expansion:
El caracter * coincidira con cero o mas caracteres. Esto significa que
cualquier cosa puede ir aqu, incluido nada. Veamos algunos ejemplos:
/etc/g* coincidir
a con todos los archivos del directorio /etc que
comiencen con g, o archivos llamados g.
/tmp/my*1 coincidir
a con los archivos de /tmp que comiencen
con my y terminen con 1, incluyendo el archivo my1.

Sintaxis de comodines: ?
El caracter ? coincide con cualquier caracter simple. Por ejemplo:
miarchivo? coincidir
a con todos los archivos cuyo nombre consista de miarchivo seguido de un solo caracter.
/tmp/notes?txt coincidir
a tanto con /tmp/notes.txt como con
notes txt si ambos existieran.

Sintaxis de comodines: [ ]
Este tipo de comodn es similar a ?, pero permite mas rigidez. Para usar este
23

comodn, coloque los caracteres que usted quisiera hacer coincidir dentro de
los corchetes []. La expresion resultante coincidira con la ocurrencia de alguno
de esos caracteres. Tambien podra usar un guion - para especificar un rango,
o combinar varios de estos. Veamos algunos ejemplos:
miarch[12] coincidir
a con miarch1 y con miarch2. El comodn se
expandir
a mientras a
un exista alguno de estos archivos en el
directorio actual.
[Cc]hange[Ll]og coincidir
a con Changelog, ChangeLog, changeLog y
changelog. Como podr
a ver, usar los comodines corchetes es
de gran utilidad para hacer coincidencias con variaciones en
letras may
usculas.
ls /etc/[0-9]* listar
a todos los objetos del sistema de archivos
del directorio /etc que comiencen con un n
umero.
ls /tmp/[A-Za-z]* listar
a todos los objetos del sistema de archivos
del directorio /tmp que comiencen con un caracter alfab
etico
(may
uscula o min
uscula).

Sintaxis de comodines: [!]


La construccion [!] es similar a [], excepto en que en vez de coincidir con
cualquier caracter de los listados dentro de los corchetes, coincidira con los
que no han sido listados entre [! y ]. Ejemplo:
rm miarch[!9] remover
a todos los archivos llamados miarch seguido de alg
un u
nico caracter, excepto miarch9

Advertencias sobre el uso de comodines


Ahora que conocemos que ciertos caracteres trabajan como comodines, sera importante tener algunas consideraciones. Como bash trata de modo especial
los caracteres comodines (?, [, ] y *), necesitaremos tener cuidados para tipear argumentos de un comando que contengan algunos de estos caracteres.
Por ejemplo, si quisiera crear un archivo que contenga la cadena de texto
(string en ingles) [fo]*, la siguiente lnea de comando no lo lograra:
$ echo [fo]* > /tmp/nuevoarchivo.txt
Si el patron [fo]* coincide con alg
un objeto del dirctorio actual de trabajo, entonces usted encontrara el nombre de estos archivos dentro de /tmp/miarchivo.txt
en vez de ver literalmente [fo]* como hubieramos querido. Para solucionarlo
una posibilidad es rodear los caracteres con comillas simples. De esta manera
se le indica a bash que no realice ninguna expancion de comodines:
24

$ echo [fo]* > /tmp/miarchivo.txt

Advertencias sobre el uso de comodines, continuacion


Si utiliza las comillas simples, su nuevo archivo contendra la cadena [fo]* como se esperaba. Alternativamente, puede usar sentencias de escape con barras
invertidas para indicarle a bash que [, ] y * deben ser tratados literalmente
en vez de como comodines:
$ echo \[fo\]\* > /tmp/miarchivo.txt
Las dos soluciones (comillas simples y sentencias de escape) tienen el mismo
efecto. Y ya que estamos hablando de expresiones con barras invertidas, es
buen momento de mencionar que si usted quiere especificar un caracter \,
debera encerrarlo entre comillas simples o precederlo de otra barra invertida
\\ (que sera expandido a \).

Comillas simples vs. dobles


Si prueba, notara que utilizar comillas dobles funcionara similiarmente a las
simples en el ejemplo anterior, pero el comillado doble permite algunas limitadas expansiones. Cuando usted este interesado en pasar texto literalmente
como argumento a un comando las comillas simples son la mejor opcion.
Para obtener mayor informacion sobre expansiones de comodines tipee en su
bash man 7 glob- Para mayor informacion sobre comillas escriba man 8 glob
y lea la seccion titulada QUOTING (COMILLAS). Si usted esta reamlente
planeando rendir los examenes LPI considere realizar estas tareas.

25

También podría gustarte