Cómo eliminar el directorio y el sufijo final de los nombres de archivo en Linux

1 mar 2021 2 min di lettura
Cómo eliminar el directorio y el sufijo final de los nombres de archivo en Linux
Indice dei contenuti

Introducción

basename es una utilidad de línea de comandos que elimina el directorio y el sufijo final de los nombres de archivo especificados.

Utilice el comando basename

El basename admite dos formatos de sintaxis:

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

basename toma un nombre de archivo e imprime el último componente del nombre de archivo. También puede eliminar opcionalmente cualquier sufijo final. Es un comando simple que acepta solo algunas opciones.

El ejemplo más simple es imprimir el nombre del archivo con los directorios raíz eliminados:

basename /etc/passwd

La salida incluirá el nombre del archivo:

passwd

El basename elimina todos los caracteres /

basename /usr/local/
basename /usr/local

Ambos comandos producirán la misma salida:

local
 local

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

Entradas múltiples

El basename puede tomar varios nombres como argumentos. Para hacer esto, invoque el comando con la -a ( --multiple ), seguida de la lista de archivos separados por espacios.

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

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

Eliminar un sufijo final

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

basename /etc/hostname name
name

Normalmente, esta función se utiliza para eliminar extensiones de archivo:

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

Este módulo 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 basename dentro de un for para cambiar el nombre de todos los archivos que terminan con " .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 shell, en lugar de invocar el basename de base, puede utilizar strip de la extensión final (extensión final) utilizando Shell Parameter Expansion.

Conclusión

El basename elimina los directorios iniciales y los sufijos finales del nombre.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.