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.