Tutorial del comando basename de Linux para principiantes (con ejemplos)

A veces, al trabajar en la línea de comandos (especialmente cuando se trata de scripts de la shell), puede que te interese sólo el nombre del archivo, pero lo que tienes a tu disposición es la ruta completa del archivo. Por tanto, el requisito es eliminar el componente de directorio de la ruta. Te alegrará saber que existe un comando -basename- que hace este trabajo.

En este tutorial, hablaremos de los fundamentos de «basename» utilizando algunos ejemplos fáciles de entender. Pero antes de pasar a eso, vale la pena mencionar que todos los ejemplos aquí han sido probados en una máquina Ubuntu 16.04 LTS.

Comando basename de Linux

El comando basename te permite eliminar los componentes de los nombres de archivo que no son necesarios. A continuación se muestra la sintaxis de la herramienta:

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

Y esto es lo que dice la página man sobre ella:

basename - strip directory and suffix from filenames

Print NAME with any leading directory components removed. If specified, also remove a trailing
SUFFIX.

A continuación se presentan algunos ejemplos al estilo de las preguntas y respuestas que deberían darte una buena idea de cómo funciona el comando basename.

Q1. ¿Cómo funciona el comando basename?

Por defecto, si ejecutas el comando «basename» con una ruta completa a un archivo como entrada, el comando devuelve el nombre del archivo en la salida. Por ejemplo, cuando ejecuté el siguiente comando

basename /home/himanshu/Downloads/analytics.pdf

Obtuve la siguiente salida:

analytics.pdf

Q2. ¿Puede basename manejar múltiples entradas?

Sí, puede. Pero para que esto ocurra, tienes que utilizar la opción de línea de comandos -a. Por ejemplo, cuando ejecuté el siguiente comando:

basename -a /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png

Y esta es la salida que obtuve:

analytics.pdf
test.png

Q3. ¿Cómo hacer que el nombre base elimine también la extensión del archivo?

A veces, es posible que sólo quieras obtener el nombre del archivo, pero no su extensión. Pues bien, esto puede hacerse utilizando la opción de línea de comandos -s (que requiere que pases el sufijo como entrada).

Por ejemplo, el siguiente comando

basename -s .pdf /home/himanshu/Downloads/analytics.pdf

produce esta salida:

analytics

Q4. ¿Cómo hacer que la salida de cada línea termine con NUL?

Por defecto, el carácter de nueva línea se utiliza como separador en la salida. Sin embargo, si quieres, puedes forzar a basename a utilizar NUL como separador. Esto puede hacerse utilizando la opción de línea de comandos -z.

Por ejemplo:

basename -az /home/himanshu/Downloads/analytics.pdf /home/himanshu/Pictures/test.png

Y aquí está la salida:

analytics.pdftest.png

Así que aquí no ves el carácter NUL. Para ello, tienes que redirigir la salida a un archivo, y luego abrir el archivo en un editor como vim. Esto es lo que muestra vim:

Conclusión

Como puedes ver, basename no es un comando muy rico en funciones: las opciones que ofrece son limitadas, y la mayoría de ellas se han tratado aquí en este tutorial. Una vez que hayas terminado de practicarlas, dirígete a lapágina man de la herramienta para aprender más sobre ella.

También te podría gustar...