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.