Dominá los comodines de Bash: Dejá de escribir nombres de archivos a mano
Si alguna vez te pasó de tener que borrar cien archivos que empiezan con 'temp_' o copiar todas las imágenes de una carpeta, sabés que escribir uno por uno es un dolor de cabeza. Ahí es donde entran los comodines (o wildcards), que te permiten hacer coincidir patrones de nombres de archivos y directorios de forma súper eficiente.
En Bash, el proceso de expandir estos patrones se llama globbing. El shell busca en el sistema de archivos los elementos que encajan con el patrón y reemplaza el comodín por la lista real de archivos antes de ejecutar el comando.
Los comodines fundamentales
1. El asterisco (*)
Es el comodín más usado. Representa cero o más caracteres. Básicamente, le decís a Bash: "no me importa qué haya acá, mientras coincida con el resto".
Ejemplo con ls:
Si tenés archivos llamados notas.txt, notas_finales.doc y foto.jpg:
ls notas*
Salida esperada:notas.txt notas_finales.doc
2. El signo de pregunta (?)
A diferencia del asterisco, el signo de pregunta representa exactamente un único carácter. Es ideal cuando sabés la longitud exacta del nombre.
Ejemplo con ls:
Si tenés archivo1.txt, archivo2.txt y archivo10.txt:
ls archivo?.txt
Salida esperada:archivo1.txt archivo2.txt (Nota que archivo10.txt queda afuera porque tiene dos caracteres donde pusimos el ?)
3. Los corchetes [ ] (Conjuntos y Rangos)
Acá es donde la cosa se pone interesante. Los corchetes te permiten definir un conjunto de caracteres permitidos para una sola posición.
- Conjunto específico
[abc]: Coincide con cualquiera de los caracteres adentro (en este caso, 'a', 'b' o 'c'). - Rangos
[0-9]o[a-z]: Coincide con cualquier carácter dentro de ese rango.
Ejemplo con cp:
Imaginá que tenés log1.txt, log2.txt y log_error.txt. Querés copiar solo los que tienen un número del 1 al 2 a una carpeta llamada backup:
cp log[1-2].txt backup/
Resultado: Se copian log1.txt y log2.txt.
4. La negación [! ]
Si ponés un signo de exclamación al principio dentro de los corchetes, Bash buscará cualquier carácter que NO esté en esa lista.
Ejemplo con rm:
Tenés data_1.csv, data_2.csv y data_a.csv. Querés borrar todo lo que NO sea un número:
rm data_[!0-9].csv
Resultado: Se borra data_a.csv y quedan intactos los archivos numéricos.
Poniéndolo todo en práctica: Un flujo real
Supongamos que estás limpiando un proyecto. Tenés una carpeta llena de archivos temporales y querés organizar el caos:
Listar todos los archivos
.logy.txt:ls *.log *.txtMover todos los archivos que empiecen con 'test' seguido de un solo dígito a una subcarpeta:
mkdir tests_old mv test[0-9].js tests_old/Borrar archivos que no empiecen con 'importante' o 'final':
(Cuidado con este comando, siempre hacé unlsantes para verificar qué vas a borrar)rm [!i][!f]*
Tips finales para no romper nada
- El peligro de
rm *: Nunca ejecutes un comando de borrado con comodines sin estar seguro. Un espacio mal puesto (ej:rm * .txten vez derm *.txt) podría borrar todo el contenido de tu directorio actual. - Probá con
echo: Si no estás seguro de qué archivos va a capturar tu patrón, usáechoantes quermocp:
Esto te mostrará en pantalla exactamente qué archivos expandió Bash antes de que hagas cualquier cambio permanente.echo *.jpg
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.