ant

METACARACTERES
3.7

sig

3.7 Caracteres comodín

Una característica importante de la mayoría de los interpretes de comandos en UNIX es la capacidad para referirse a más de un fichero usando caracteres especiales. Estos llamados comodines le permiten referirse a, por ejemplo, todos los ficheros que contienen el carácter "n".

El comodín "*" hace referencia a cualquier carácter o cadena de caracteres en el fichero. Por ejemplo, cuando usa el carácter "*" en el nombre de un fichero, el interprete de comandos lo sustituye por todas las combinaciones posibles provenientes de los ficheros en el directorio al cual nos estamos refiriendo.

Veamos un ejemplo rápido. Supongamos que Decker tiene los ficheros practica.c, ram.asm y documento.txt en el directorio actual.

/home/Decker# ls
practica.c ram.asm documento.txt
/home/Decker#
Para acceder a todos los ficheros con la letra "o" en su nombre, hemos de usar la orden
/home/Decker# ls *o*
documento.txt
/home/Decker#
Como puede ver, el comodín "*" ha sido sustituido con todas las combinaciones posibles que coincidían de entre los ficheros del directorio actual.

El uso de "*" solo, simplemente se refiere a todos los ficheros, puesto que todos los caracteres coinciden con el comodín.
/home/Decker# ls *
practica.c ram.asm documento.txt
/home/Decker#
Veamos unos pocos ejemplos mas.
/home/Decker# ls to*

documento.txt

/home/Decker# ls *asm

ram.asm

/home/Decker# ls *t*

documento.txt practica.c

/home/Decker# ls d*t

documento.txt

/home/Decker#
El proceso de la sustitución de "*" en nombres de ficheros es llamado expansión de comodines y es efectuado por el intérprete de comandos. Esto es importante: las ordenes individuales, 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 ficheros que se adaptan. Luego la orden
/home/Decker# ls *o*
es expandida para obtener
/home/Decker# ls documento.txt
Una nota importante acerca del carácter comodín "*". El uso de este comodín NO cuadrará con nombres de ficheros que comiencen con un punto ("."). Estos ficheros son tratados como "ocultos" aunque no están realmente ocultos, simplemente no son mostrados en un listado normal de ls y no son afectados por el uso del comodín "*".

He aqui un ejemplo. Ya hemos mencionado que cada directorio tiene dos entradas especiales: "." que hace referencia al directorio actual y ".." que se refiere al directorio padre. De cualquier forma, cuando use ls esas dos entradas no se mostraran.
/home/Decker# ls
practica.c ram.asm documento.txt
/home/Decker#
Si usa el parámetro -a con ls podrá ver nombres de ficheros que comienzan por ".". Observe:
/home/Decker# ls -a
. .. .bash_profile .bashrc practica.c ram.asm documento.txt
/home/Decker#
Ahora podemos ver las dos entradas especiales, "." y "..", así como otros dos ficheros "ocultos", .bash_profile y .bashrc. Estos dos ficheros son usados en el arranque por bash cuando Decker se presenta al sistema. Más información sobre esto en la Sección 3.13.3. Note que cuando usamos el comodín "*", no se muestra ninguno de los nombres de fichero que comienzan por ".".
/home/Decker# ls *
practica.c ram.asm documento.txt
/home/Decker#
Esto es una característica de seguridad: si "*" coincidiera con ficheros que comienzan por "." actuaría sobre "." y "..". Esto puede ser peligroso con ciertas ordenes. 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 ficheros con un carácter de longitud, y "ls termca?" mostrará "termcap" pero no "termcap.backup". Aquí tenemos otro ejemplo:
/home/Decker# ls documento.tx?
documento.txt
/home/Decker# ls ram.??m
ram.asm
/home/Decker# ls ???ctica.?
practica.c
/home/Decker#
Como puede ver, los caracteres comodín le permiten referirse a más de un fichero a la vez. En el resumen de ordenes en la Sección 3.4 dijimos que cp y mv pueden copiar o mover múltiples ficheros de una vez. Por ejemplo,
/home/Decker# cp /etc/s* /home/Decker
copiará todos los ficheros de /etc que comiencen por "s" al directorio /home/Decker. Por lo tanto, el formato de la orden cp es realmente
cp <fichero1> <fichero2> <fichero3> ...<ficheroN> <destino>
donde <fichero1> a <ficheroN> es la lista de los ficheros a copiar, y <destino> es el fichero o directorio destino donde copiarlos. mv tiene idéntica sintaxis.

Nótese que si esta copiando o moviendo mas de un fichero, <destino> debe ser un directorio. Solo puede copiar o mover un único fichero a otro fichero.