Usando el comando basename en scripts de Bash
Usando el comando basename en scripts de Bash
En la programación de Bash, una de las tareas más comunes es manipular rutas de archivos, especialmente cuando quieres extraer solo el nombre del archivo de una ruta completa. Ahí es donde entra el comando basename. Aunque parece simple, basename tiene casos de uso potentes cuando se utiliza correctamente en scripts más complejos, herramientas de automatización, hosting services y entornos CI/CD.
¿Qué es basename?
El comando basename elimina la ruta del directorio y, opcionalmente, quita una extensión de archivo, dejando solo el nombre base (el componente final de una ruta de archivo).
🔧 Sintaxis básica:
basename [path] [suffix]✅ Ejemplos simples:
basename /home/user/docs/report.pdf
basename /home/user/docs/report.pdf .pdf
¿Por qué usar basename en scripts?
Aquí hay solo algunos ejemplos de necesidades reales de scripting:
Registro: extrae el nombre de un archivo de log que se está procesando.
Archivado: añade solo el nombre del archivo a un archivo comprimido.
Automatización: procesa lotes de archivos y genera nombres de salida.
Pipelines: extrae nombres de archivo en pasos CI/CD.
Casos de uso prácticos en scripts de Bash
📁 1. Recorrer archivos con registro
Este script recorre archivos .log, extrae el nombre sin extensión y registra cada acción. basename simplifica el manejo de nombres de archivo sin cortes complejos de cadenas.
📂 2. Usar basename para rutas de archivo dinámicas
Supongamos que recibes rutas completas desde la entrada del usuario u otro proceso:
#!/bin/bash
input_path="$1"
filename=$(basename "$input_path")
echo "The file name is: $filename"
Usar basename en tu script garantiza flexibilidad al trabajar con rutas de archivo dinámicas, especialmente en entornos como un Linux VPS donde los logs, archivos de configuración y copias de seguridad pueden residir en diferentes directorios. Esto hace que tu script sea robusto independientemente de si se le pasa una ruta completa como /var/log/syslog o un archivo relativo como ./config.txt.
🧪 3. Combinar basename con dirname
Úsalos juntos para aislar elementos de la ruta:
#!/bin/bash
path="/etc/nginx/nginx.conf"
echo "Directory: $(dirname "$path")"
echo "Filename: $(basename "$path")"Eliminar extensiones de archivo con basename
Si quieres eliminar extensiones conocidas:
⚠️ Nota: Esto solo funciona si el sufijo coincide exactamente. Así que .txt funciona, pero .TXT o .tar.gz no, a menos que se especifique explícitamente.
Para múltiples extensiones, combina basename con otras herramientas:
file="/tmp/data/archive.tar.gz"
filename=$(basename "$file")
clean_name=${filename%%.*}
echo "$clean_name"
# Output: archiveO:





