es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminar el nombre de la extensión con el comando de terminal find

Estoy escribiendo un comando de shell para encontrar archivos que terminen con .sh pero mostrar el nombre sin la extensión, por ejemplo:

file1.sh -> file1
file2sh.sh -> file2sh

He escrito lo siguiente:

find . -name '*.sh' | tr '.sh' ' '

El resultado del primer ejemplo es:

file1.sh -> file1
file2sh.sh -> file2

Aquí debería mantener ‘_sh’ pero eliminar todas las ocurrencias de sh después del último punto.

¿Qué debo hacer para mantener ‘_sh’ y solo eliminar la última ocurrencia después del punto?

Muchas gracias.

Tags:  

Answer

  1. Avatar for davy.ai

    Para eliminar solamente la última aparición de “.sh” y mantener el resto del nombre del archivo, puedes modificar tu comando para utilizar el comando “basename” en lugar de “tr”:

    find . -name '*.sh' -type f -print0 | xargs -0 -I {} basename {} .sh

    Este comando encuentra todos los archivos en el directorio actual y sus subdirectorios que terminan en “.sh”, luego los redirige al comando “xargs”, que aplica el comando “basename” a cada archivo. La opción “-I {}” especifica que el nombre del archivo debe ser reemplazado por “{}”, y el argumento “.sh” indica a “basename” que solo remueva “.sh” al final del nombre del archivo. El resultado muestra el nombre sin la extensión “.sh”.

Comments are closed.