Comando Linux basename

Linux 命令大全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

  1. Ruta(obligatorio): la cadena de ruta completa a procesar
  2. 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

$ basename /home/user/documents/report.txt
report.txt

Ejemplo 2: Eliminar la extensión del archivo

Ejemplo

$ basename /home/user/documents/report.txt .txt
report

Ejemplo 3: Procesar múltiples archivos (usando la opción -a)

Ejemplo

$ basename -a /path/to/file1.txt /another/path/file2.log
file1.txt
file2.log

Escenarios de aplicación práctica

Escenario 1: Procesamiento por lotes de extensiones de archivo

Ejemplo

for file in *.jpg; do
    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

#!/bin/bash
SCRIPT_NAME=$(basename "$0")
echo "Ejecutando el script:$SCRIPT_NAME"

Escenario 3: Uso combinado con el comando find

Ejemplo

find /var/log -name "*.log" -exec basename {} \;

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:

  1. La ruta contiene caracteres especiales (como espacios) pero no está entre comillas

    • Incorrecto:basename /path/with spaces/file
    • Correcto:basename "/path/with spaces/file"
  2. No se usaron comillas al usar variables en un script

    • Incorrecto:basename $filepath
    • Correcto:basename "$filepath"

Técnicas avanzadas

Técnica 1: Manejar múltiples sufijos

Ejemplo

$ basename archive.tar.gz .gz
archive.tar
$ basename archive.tar.gz .tar.gz
archive

Técnica 2: Uso en tuberías (pipes)

Ejemplo

echo "/usr/local/bin/python" | xargs basename

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

path="/home/user/file.txt"
filename="${path##*/}"  # Equivalente a basename
echo "$filename"

Linux 命令大全Guía completa de comandos Linux

Otras extensiones