Comando Linux basename
Guía completa de comandos Linux
¿Qué es el comando basename?
basenameEs una herramienta de línea de comandos simple pero práctica en el sistema Linux, que se utiliza para extraer la parte del nombre de archivo de una ruta. Actúa como un analizador de rutas que elimina la información del directorio y conserva solo el nombre de archivo final.
Comprensión por analogía: imagina que tienes una dirección postal completa (como "China/Beijing/Distrito de Haidian/Calle Zhongguancun n.º 1"),basenamela función de basename es extraer solo la parte final "Calle Zhongguancun n.º 1".
Sintaxis básica del comando basename
basename [选项] 路径 [后缀]
Descripción de parámetros
- Ruta(obligatorio): la cadena de ruta completa a procesar
- Sufijo(opcional): si se especifica, este sufijo se eliminará del resultado
Opciones comunes
| Opción | Descripción |
|---|---|
-a |
Admite múltiples rutas como argumentos |
-s 后缀 |
Elimina el sufijo especificado (equivalente a añadir el parámetro de sufijo al final del comando) |
-z |
Separa los resultados de salida con caracteres nulos (en lugar de saltos de línea) |
Ejemplos de uso básico
Ejemplo 1: Extracción básica del nombre de archivo
Ejemplo
report.txt
Ejemplo 2: Eliminar la extensión del archivo
Ejemplo
report
Ejemplo 3: Procesar múltiples archivos (usando la opción -a)
Ejemplo
file1.txt
file2.log
Escenarios de aplicación práctica
Escenario 1: Procesamiento por lotes de extensiones de archivo
Ejemplo
mv "$file" "$(basename "$file" .jpg).png"
done
Explicación: este script renombrará todos los archivos .jpg del directorio actual a archivos .png, modificando solo la extensión y conservando el nombre original del archivo.
Escenario 2: Obtener el nombre del script actual dentro de un script
Ejemplo
SCRIPT_NAME=$(basename "$0")
echo "Ejecutando el script:$SCRIPT_NAME"
Escenario 3: Uso combinado con el comando find
Ejemplo
Función: encuentra todos los archivos .log en el directorio /var/log y muestra solo el nombre del archivo (sin la ruta).
Preguntas frecuentes
Q1: ¿Cuál es la diferencia entre basename y dirname?
| Comando | Función | Entrada de ejemplo | Salida de ejemplo |
|---|---|---|---|
basename |
Extrae la última parte de la ruta | /a/b/c.txt | c.txt |
dirname |
Extrae la parte del directorio | /a/b/c.txt | /a/b |
Q2: ¿Por qué mi comando basename no funciona?
Causas comunes:
La ruta contiene caracteres especiales (como espacios) pero no está entre comillas
- Incorrecto:
basename /path/with spaces/file - Correcto:
basename "/path/with spaces/file"
- Incorrecto:
No se usaron comillas al usar variables en un script
- Incorrecto:
basename $filepath - Correcto:
basename "$filepath"
- Incorrecto:
Técnicas avanzadas
Técnica 1: Manejar múltiples sufijos
Ejemplo
archive.tar
$ basename archive.tar.gz .tar.gz
archive
Técnica 2: Uso en tuberías (pipes)
Ejemplo
Salida:python
Técnica 3: Alternativa con expansión de parámetros
En Bash, también puedes usar la expansión de parámetros para lograr una funcionalidad similar:
Ejemplo
filename="${path##*/}" # Equivalente a basename
echo "$filename"
Otras extensiones