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 o comodines.
Linux usa
los comodines o expresiones regulares para la sustitución de caracteres o secuencia de caracteres. Estos caracteres comodín nos puede ser de mucha utilidad cuando lanzamos el comando de
para buscar un archivo, o varios archivos o directorios cuyo nombre
contiene una determinada secuencia de caracteres.
|
Caracteres comodín y expresiones regulares para Linux
|
El comodín “*”: Sustituye
una cadena de caracteres del nombre del archivo o directorio. Cuando se usa el carácter “*” para referirse al nombre de un archivo o directorio,
el intérprete de comandos lo sustituye por todas las combinaciones posibles de caracteres del nombre de los archivos y directorios dentro del directorio, que nos estamos refiriendo.
Por ejemplo, supongamos que en el directorio del usuario aceitunero tenemos varios directorios, como puede ser aceitunero, antonio y invitado.
Si
observamos todos estos directorios termina en “o”, si lanzamos el comando ls nos mostrará todos los archivos y directorios que tenemos:
aceitunero@Pc15:~$ ls
aceitunero Documentos Imágenes Plantillas Videos
antonio Escritorio invitado Público
Descargas examples.desktop Música salida.txt
Pero si queremos
listar todos los archivos que termina con la letra “o”, usaremos en esta línea de comandos el comodín "*", y el resultado sería:
aceitunero@Pc15:~$ ls *o
aceitunero:
antonio:
Escritorio:
Imagenes_ISO introduccion_linux_2010
invitado:
Público:
Como podemos ver, el comodín “*” ha
sustituido todos los caracteres anteriores al carácter, que se ha introducido y ha realizado las combinaciones posibles de caracteres para mostrar los todos los archivos y directorios
que terminen con la letra “o” del directorio, donde nos encontramos. Otros ejemplos sería:
aceitunero@Pc15:~$ ls a*
aceitunero:
total 0
antonio:
total 0
El comodín “?”: Este
carácter comodín sólo sustituye solo un carácter, por ejemplo:
aceitunero@Pc15:~$ ls -ld antoni?
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
aceitunero@Pc15:~$ ls -ld ?*o
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
drwxr-xr-x 5 aceitunero aceitunero 4096 2011-05-05 16:17 Escritorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 invitado
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Público
Los
caracteres comodín nos permiten referirse a más de un archivo a la vez.
También
podemos usarlos en combinación con otros comandos, por ejemplo con el comando cp o el comando mv, para copiar o mover varios archivos de una vez. Por ejemplo:
aceitunero@Pc15:~$ mkdir archivos_host
aceitunero@Pc15:~$ cp /etc/host/* /home/aceitunero/archivos_host/
aceitunero@Pc15:~$ cd archivos_host/
aceitunero@Pc15:~/ archivos_host$ ls
host.conf hostname hosts hosts.allow hosts.deny
Lo que estamos
haciendo es copiar todos los archivos del directorio /etc que comiencen con “host” al directorio /home/aceitunero/archivos_host/.
El comodín [ ]: Los
corchete se utilizan para pasar un rango de caracteres, que tomará para realizar la búsqueda, por ejemplo:
aceitunero@Pc15:~$ ls -ld [a-c]*
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-05 16:35 archivos_host
-rw-r--r-- 1 aceitunero aceitunero 79 2011-05-04 19:40 basura.txt
El listado que
nos muestra son los archivos o directorios que comienza en “a” hasta la “c” incluidas y como hemos pasado también el
carácter comodín “*” tomará cualquier carácter que le preceda. Otros ejemplos:
aceitunero@Pc15:~$ ls -ld [a-c]*o
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
aceitunero@Pc15:~$ ls -ld *[a-c]
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música
El comodín !: La
exclamación se utilizan para denegar el rango de caracteres, que se pasa, es decir, tomará
todos los caracteres menos los que se pasen para realizar la búsqueda, por ejemplo:
aceitunero@Pc15:~$ ls -ld [!a-c]*
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Descargas
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Documentos
drwxr-xr-x 5 aceitunero aceitunero 4096 2011-05-05 16:17 Escritorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Imágenes
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 invitado
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Plantillas
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Público
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Videos
El
listado que nos muestra son los archivos o directorios que NO comienza por “a” hasta la “c” incluidas y como
hemos pasado también el carácter comodín “*” tomará cualquier variación de caracteres. Otros ejemplos:
aceitunero@Pc15:~$ ls -ld [!a-c]*o
drwxr-xr-x 5 aceitunero aceitunero 4096 2011-05-05 16:17 Escritorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 invitado
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Público
aceitunero@Pc15:~$ ls -ld *[!o-s]
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-05 16:35 archivos_host
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música
El comodín { }: Las
llaves se utilizan para pasar un numero de caracteres, que se usarán para realizar
la búsqueda de los archivos y directorios que contenga eso caracteres, por ejemplo:
aceitunero@Pc15:~$ ls -ld {a,b}*
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-05 16:35 archivos_host
-rw-r--r-- 1 aceitunero aceitunero 79 2011-05-04 19:40 basura.txt
El listado que
nos muestra son los archivos o directorios que comienza en “a” y los que comienzan por “b” y con el carácter comodín
“*” tomará cualquier otro carácter. Otros ejemplos:
aceitunero@Pc15:~$ ls -ld {a,c}*o
ls: no se puede acceder a c*o: No existe el fichero o el directorio
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 aceitunero
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 19:30 antonio
aceitunero@Pc15:~$ ls -ld *{a,c}
drwxr-xr-x 2 aceitunero aceitunero 4096 2011-05-04 17:39 Música
Como podéis
observar estas combinaciones de los comodines nos puede ayudar a la hora de
copiar, mover, listar, etc. un conjunto de archivos o directorios de una forma sencilla.
Espero que os sea de ayuda a todos un saludo y espero que dejes tu comentario:
Antonio
Comentarios
Me fue útil para resolver una duda rápidamente.
Gracias por la info. A pesar que el post tiene ya unos 6 años, ¡es tremendamente útil!
Me estaba volviendo loco intentando mover archivos que comiencen con determinada letra y luego *.
Un saludo, gracias nuevamente!
Sir Chaox | IT Repair You
Intentaré ponerle remedio y un millón de gracias de nuevo.
echo $(ls *$Variable*)
para listar archivos pero con el valor de la variable, que podria hacer?
No entiendo muy bien, lo que quieres preguntar, sobre:
“Puedo hacer esto: echo $(ls *$Variable*) para listar archivos pero con el valor de la variable, que podría hacer?”
Pero el comando “ls” se usa en #Linux para listar el contenido de directorios y archivos contenidos en un directorio y ver a que usuarios y grupos pertenecen y sus permisos.
No crees, que estás rizando mucho el rizo.
Perdona no poderte ayudar más, pero de todas formas estoy a tu disposición, ok
Un saludo:
Antonio
Tengo que decirte que NO EXISTEN los comodines punto y dos puntos ni en Linux, ni en Windows... 🙁
Creo que lo que piensas, que se usa como comodín el punto y dos puntos, es cuando hace referencia a una ruta relativa para acceder a un directorio, te pongo este ejemplo en Windows, pero la teoría te sirve para todos los sistemas operativos y sobre todo en el Diseño Web:
Imagínate que estás en el directorio "Recorded Videos"
C:\Users\Antonio\Videos>cd "Recorded Videos"
Compruebo los archivos y subdirectorios, con dir que en Linux es ls
C:\Users\Antonio\Videos\Recorded Videos>dir
Directorio de C:\Users\Antonio\Videos\Recorded Videos
13/04/2017 18:57 DIR .
13/04/2017 18:57 DIR ..
13/04/2017 19:00 1.465.856 record_000001.avi
1 archivos 1.465.856 bytes
2 dirs 910.456.340.480 bytes libres
Ahora quiero copiar el video record_000001.avi en la directorio Antonio:
C:\Users\Antonio\Videos\Recorded Videos> copy record_000001.avi ..\..\Antonio
1 archivo(s) copiado(s).
El punto (.) hace referencia al directorio raíz, es decir, al directorio que me encuentro, ya sea home, etc, Document, Antonio o PepeBotijo…
Los dos puntos (..) hace referencia al directorio inferior, es decir, al directorio que hay debajo de donde me encuentro, ya sea home, etc, Escritorio, Videos o PhotosPor… 😁
Realmente no son comodines, ok… 😉👍
Repasa toda la información que puedas sobre las rutas absolutas y relativas, en caso de que tengas dudas, no te cortes, preguntame y si te puedo ayudar cuenta conmigo, ok 😉👍
Espero haberte ayudado y perdona no haberte contestado antes, es que ando un poco liado con el trabajo, los cursos, los quehaceres… y los que no quehaceres…
Un saludo:
Antonio Cruz 🤗
El .. no es el directorio inferior, es todo lo contrario, el directorio superior. Además, pueden existir n directorios inferiores pero sólo uno superior.
No has dado una!
Disculparme por el error que he cometido. Pido mis disculpas. 😐
Copy /home/*/BN???.txt
Buscaría en todos los directorios, que cuelgan de home/, los archivos que empiecen por BN, que tengan tres caracteres y terminen con la extensión TXT.
Pero a esa línea de comando, le faltan el directorio de destino, dónde tiene que hacer el copy. 😉👍
Y te recuerdo, que el Linux, aunque se pueden poner, pero no hace falta que los archivos tengan extensiones.
Un saludo y gracias por tu comentario. 👏😀
r[oOoO]t
Pero mi consejo es que uses el carácter "?"
Por ejemplo: r??t
Pero tu propuesta es correcta 😎👍
Publicar un comentario
Dejanos tu opinión o comentario, entre todos podemos aprender más sobre los temas que se tratan en este Blog. No te olvides seguidme en Twitter, YouTube o Facebook. Muchas gracias por tu tiempo. 👋😎