basenamees una utilidad de línea de comandos que elimina el directorio y el sufijo final de los nombres de archivo dados.

Usando el basenamecomando

El basenamecomando admite dos formatos de sintaxis:

basename NAME [SUFFIX]
basename OPTION... NAME...

basenametoma un nombre de archivo e imprime el último componente del nombre de archivo. Opcionalmente, también puede eliminar cualquier sufijo final. Es un comando simple que acepta solo algunas opciones.

El ejemplo más básico es imprimir el nombre del archivo con los directorios principales eliminados:

basename /etc/passwd

La salida incluirá el nombre del archivo:

passwd

El basenamecomando elimina los /caracteres finales:

basename /usr/local/basename /usr/local

Ambos comandos producirán el mismo resultado:

local
local

De forma predeterminada, cada línea de salida termina en un carácter de nueva línea. Para terminar las líneas con NUL, use la opción -z( ).--zero

Entradas Múltiples

El basenamecomando puede aceptar varios nombres como argumentos. Para hacerlo, invoque el comando con la opción -a--multiple), seguido de la lista de archivos separados por espacios.

Por ejemplo, para obtener los nombres de archivo de /etc/passwd y /etc/shadow ejecutaría:

basename -a /etc/passwd /etc/shadow
passwd
shadow

Eliminar un sufijo final

Para eliminar cualquier sufijo final del nombre del archivo, pase el sufijo como segundo argumento:

basename /etc/hostname name
host

Generalmente, esta característica se usa para quitar extensiones de archivos:

basename /etc/sysctl.conf .conf
sysctl

Otra forma de eliminar un sufijo final es especificar el sufijo con la opción -s( ):--suffix=SUFFIX

basename -s .conf /etc/sysctl.conf
sysctl

Esta forma de sintaxis le permite eliminar cualquier sufijo final de varios nombres:

basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf
sysctl
sudo

Ejemplo

El siguiente ejemplo muestra cómo usar el basenamecomando dentro de un forciclo bash para cambiar el nombre de todos los archivos que terminan en ".jpeg" en el directorio actual reemplazando la extensión de archivo de ".jpeg" a ".jpg":

for file in *.jpeg; do
    mv -- "$file" "$(basename $file .jpeg).jpg"
done

Si está utilizando bash como su shell, en lugar de invocar basename, puede usar strip the trailing extension usando Shell Parameter Expansion.

Conclusión

El basenamecomando elimina cualquier directorio inicial y sufijo final del nombre.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.