comando find: ¿cómo ignorar la ruta?


2

Tengo que encontrar algún tipo de archivo en un directorio y sus subdirectorios y solo tengo que imprimir los nombres de archivo. Así que aquí está el comando principal:
find -type f -name "*.c"

Ahora, ¿cómo podría cortar los caminos de cada resultado? (posiblemente podría hacerse con awk, pero espero que haya una manera más fácil de hacerlo).

Respuestas:


5

GNU find admite el -printfpredicado, que admite el %fespecificador de formato para generar el nombre del archivo.

find -type f -name "*.c" -printf '%f\n'

respondió tan rápido. probado. gracias de nuevo ! : D
Adorjan

4

Usar awkno es tan complicado:

find . -name '*.c' -type f | awk -F/ '{print $NF}'

O sed:

find . -name '*.c' -type f | sed 's|.*/||'

(suponiendo que los nombres de archivo no contengan caracteres de nueva línea) y eso funcionará con cualquier findimplementación.


Suponiendo que los nombres de archivo y los nombres de directorio de ruta no contienen caracteres de nueva línea.
Hauke ​​Laging

2

Puede usar el basenameprograma para obtener el nombre del archivo:

find . -type f -name \*.c -exec basename {} +

Esto funciona en finds que no tienen la -printfextensión GNU .


1

GNU find lo sabe -printf. Si también busca subdirectorios, ¡los nombres de archivo pueden aparecer varias veces (en general)!

Necesitas -printf "%p\n"o -printf "%f\n".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.