Cómo obtener solo nombres del comando find sin ruta

14

Estoy tratando de obtener solo los nombres del resultado de búsqueda usando find, pero siempre incluye los directorios también. ¿Cómo puedo imprimir solo los nombres (o asignar a una variable) usando find

find trunk/messages/ -name "*.po" -printf '%f\n'

un comando similar para asignar esto a una variable, por ejemplo, "recurso" para usarlo más adelante.

EDITAR: Y si es posible, solo el nombre excluyendo la extensión.

despierta
fuente

Respuestas:

20

Utilizar find trunk/messages/ -name "*.po" -exec basename {} .po \;

Ejemplo y explicaciones:

Crea algunos archivos de prueba:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Ok, se encuentran los archivos, incluida la ruta.

Para cada resultado basename, ejecute y elimine la parte .po del nombre

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2
Hennes
fuente
Muchas gracias :). ¿Puedo quitar solo la extensión PO de los directorios? Quiero decir: dir1 / po1.po y dir2 / po2.po ¿se pueden obtener como dir1 / po1 y dir2 / po2?
Despertar el
@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck
@slhck gracias. Por último, necesito obtener el nombre de archivo sin extensión y la última carpeta en la que se encuentra: por ejemplo: dir1 / subdir1 / subsubdir1 / po1.po y dir2 / subdir2 / subsubdir2 / po2.po debe establecerse en una variable como: subsubdir1 / po1 subsubdir2 / po2, respectivamente.
Despertar el
@ user1754665 Hmm, tal vezfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck el
@Hennes ¿Cuál es el propósito de la barra invertida antes de la llave de apertura en la última find?
Utku