Una característica importante de la mayoría de los intérpretes de comandos en Unix es la capacidad para referirse a más de un archivo usando expresiones regulares. En su forma más simple, esto consiste en la utilización de los llamados “comodines” que permiten referirse a, por ejemplo, todos los archivos cuyo nombre contiene una determinada secuencia de caracteres.
*
” y “?
”
El comodín “*
” hace referencia cualquier cadena de caracteres en el nombre del archivo. Cuando se usa el carácter “*
” para referirse al nombre de un archivo, el intérprete de comandos lo sustituye por todas las combinaciones posibles provenientes de los archivos en el directorio al cual nos estamos refiriendo.
Veamos un ejemplo rápido. Supongamos que diego
tiene los archivos hugo
, paco
y luis
en el directorio actual.
/home/diego$ ls
hugo luis paco
/home/diego$
Para listar todos los archivos con la letra “o
” en su nombre, usamos la orden:
/home/diego$ ls *o*
hugo paco
/home/diego$
Como podemos ver, el comodín “*
” ha sido sustituido con todas las combinaciones posibles que coincidían de entre los archivos del directorio actual.
El uso de “*
” solo, hace referencia a todos los archivos, puesto que todos los caracteres coinciden con el comodín.
/home/diego$ ls *
hugo luis paco
/home/diego$
Veamos algunos otros ejemplos:
/home/diego$ ls h*
hugo
/home/diego$ ls *is
luis
/home/diego$ ls *u*
hugo luis
/home/diego$ ls p*o
paco
/home/diego$
El proceso de la sustitución de caracteres como “*
” en nombres de archivos es llamado “expansión de comodines” y es efectuado por el intérprete de comandos. Esto es importante: los comandos, como ls
, nunca ven el “*
” en su lista de parámetros. Es el intérprete quien expande los comodines para incluir todos los nombres de archivos que se adaptan. Por lo tanto la orden:
/home/diego$ ls *o*
es expandida para obtener
/home/diego$ ls hugo paco
Otro carácter comodín es “?
”. Este carácter comodín sólo expande un único carácter. Luego “ls ?
” mostrará todos los nombres de archivos con un carácter de longitud, y “ls termca?
”, por ejemplo, mostrará “termcap
” pero no “termcap.backup
”. Aquí tenemos otro ejemplo:
/home/diego$ ls hu?o
hugo
/home/diego$ ls p??o
paco
/home/diego$ ls ???s
luis
/home/diego$
Como podemos ver, los caracteres comodín nos permiten referirse a más de un archivo a la vez. En el sumario de comandos básicos dijimos que cp
y mv
pueden copiar o mover múltiples archivos de una vez. Por ejemplo:
/home/diego$ cp /etc/s* /home/diego
copiará todos los archivos de /etc
que comiencen con “s
” al directorio /home/diego
.
Los comodines “*
” y “?
” no coincidirán con nombres de archivos que comiencen con un punto (“.
”). Estos archivos son tratados como ocultos. Los archivos de este tipo no son mostrados en un listado normal de ls
y no son afectados por el uso de “*
” y “?
”.
Por ejemplo, ya hemos mencionado que cada directorio tiene dos entradas especiales: “.
”, que hace referencia al directorio actual, y “..
”, que se refiere al directorio padre. Como ya hemos visto, al usar ls
esas dos entradas no se muestran:
/home/diego$ ls
hugo luis paco
/home/diego$
Si usamos el parámetro “-a
” con ls
podremos ver nombres de archivos que comienzan con “.
”. Observemos:
/home/diego$ ls -a
. .. .bash_profile .bashrc hugo luis paco
/home/diego$
Ahora podemos ver las dos entradas especiales, “.
” y “..
”, así como otros dos archivos ocultos: “.bash_profile
” y “.bashrc
”.
Estos dos archivos son usados en el arranque por el intérprete de comandosbash
cuandodiego
realiza el login.