Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Cómo extraer el nombre del archivo y su extensión en un comando de shell

8 de junio de 2011

Quiero obtener en un script el nombre de un archivo y su extensión, pero por separado. Por el momento la mejor solución que he encontrado es la siguiente:

NOMBRE=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`

El problema es que esta solución no es correcta porque no funciona cuando el archivo tiene varios puntos . en su nombre. Si fuera por ejemplo a.b.js, entonces el nombre sería a y la extensión b.js, por lo que no es correcto.

Si pudiera usar Python, simplemente haría:

archivo, extension = os.path.splitext(path)

En cualquier caso no quiero ejecutar el intérprete de Python simplemente para esto, así que me gustaría que alguien me indicara una solución mejor.

Estás leyendo una traducción autorizada de la pregunta Extract filename and extension in bash planteada por ibz en StackOverflow.

Respuestas

#1

En primer lugar, extrae el nombre completo del archivo a partir de su ruta y después sepáralo en nombre y extensión utilizando lo siguiente:

nombreCompleto=$(basename "$rutaDelArchivo")
extension="${nombreCompleto##/.}"
nombre="${nombreCompleto%./}"

Otra forma de extraer el nombre completo a partir de la ruta sería centrarte en la última barra / de la ruta en vez del punto. La ventaja es que así te funcionaría incluso cuando la extensión del archivo sea muy rara:

nombreCompleto="${rutaDelArchivo##//}"
extension="${nombreCompleto##/.}"
nombre="${nombreCompleto%.*}"

@librosweb

21 septiembre 2014, 19:56