Este artículo tal vez les pueda servir al momento de desarrollar un script Bash. Existe una herramienta en Linux, llamada basename que permite desmenuzar una ruta a un archivo. Es decir, permite remover tanto la ruta al directorio como cualquier sufijo o extensión.

Vamos directamente a un ejemplo utilizando el archivo /usr/lib/jvm/jre/lib/resources.jar

$ ls -l /usr/lib/jvm/jre/lib/resources.jar
-rw-r--r-- 1 root root 1055613 Jul  3 15:04 /usr/lib/jvm/jre/lib/resources.jar

basename toma como parámetro una ruta a un archivo y remueve todos los caracteres comenzando desde la izquierda hasta la última barra inclusive (/):

$ basename /usr/lib/jvm/jre/lib/resources.jar                               
resources.jar

Si tuvieramos la ruta al archivo en una variable quedaría así:

$ archivo=/usr/lib/jvm/jre/lib/resources.jar
$ echo $archivo                             
/usr/lib/jvm/jre/lib/resources.jar
$ basename $archivo
resources.jar

El resultado se puede almacenar en otra variable (por ejemplo nombre_archivo) de la siguiente forma:

$ nombre_archivo=$(basename $archivo)
$ echo $nombre_archivo
resources.jar

En caso de necesitar remover un sufijo o extensión, se debe indicar como un parámetro adicional, por ejemplo:

$ basename /usr/lib/jvm/jre/lib/resources.jar .jar
resources
$ basename /usr/lib/jvm/jre/lib/resources.jar s.jar
resource
$ basename /usr/lib/jvm/jre/lib/resources.jar pepe
resources.jar

Si el nombre de archivo no posee el sufijo indicado no se produce ningún cambio.

¿Qué sucede si necesitamos realizar la operación inversa? Es decir, de un determinado path remover el nombre de archivo y obtener sólo la ruta completa al directorio. Para ello existe la herramienta dirname:

$ dirname /usr/lib/jvm/jre/lib/resources.jar
/usr/lib/jvm/jre/lib

Se observa que este comando remueve la última barra (/). Si necesitamos incluir la última barra podemos concatenarla en una variable (llamada "directorio" en este ejemplo) de la siguiente forma:

$ directorio=$(dirname /usr/lib/jvm/jre/lib/resources.jar)/
$ echo $directorio
/usr/lib/jvm/jre/lib/

Una herramienta adicional para "destripar" o "desmenuzar" rutas es readlink. Esta se utiliza para obtener el valor de un link simbólico. Por ejemplo (en mi sistema CentOS), el archivo /usr/bin/mailq es un link simbólico a /etc/alternatives/mta-mailq:

$ ls -l /usr/bin/mailq
lrwxrwxrwx. 1 root root 27 Jun 21  2012 /usr/bin/mailq -> /etc/alternatives/mta-mailq

Dada una ruta a un link simbólico, readlink retorna el valor del mismo, es decir la ruta al archivo que apunta:

$ readlink /usr/bin/mailq
/etc/alternatives/mta-mailq

Espero que les sirva!


Tal vez pueda interesarte


Compartí este artículo