find command: como ignorar o nome do caminho?

2

Eu tenho que encontrar algum tipo de arquivo em um diretório e seus subdiretórios, e eu só tenho que imprimir os nomes dos arquivos. Então aqui está o comando principal:
find -type f -name "*.c"

Agora, como eu poderia cortar os caminhos de cada resultado? (Possivelmente poderia ser feito com o awk, mas espero que haja uma maneira mais fácil de fazer isso).

    
por Adorjan 20.05.2013 / 16:50

4 respostas

5

O GNU find suporta o predicado -printf , que suporta o especificador de formato %f para a saída no nome do arquivo.

find -type f -name "*.c" -printf '%f\n'
    
por 20.05.2013 / 16:54
4

Usar awk não é tão complicado:

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

Ou sed :

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

(assumindo que os nomes de arquivo não contenham caracteres de nova linha) e isso funcionará com qualquer find de implementação.

    
por 20.05.2013 / 17:28
2

Você pode usar o programa basename para obter o nome do arquivo:

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

Isso funciona em find s que não têm a extensão -printf do GNU.

    
por 20.05.2013 / 18:53
1

O GNU find conhece -printf . Se você pesquisar subdiretórios também, os nomes dos arquivos poderão ocorrer várias vezes (em geral)!

Você precisa de -printf "%p\n" ou -printf "%f\n" .

    
por 20.05.2013 / 16:55