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'
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).
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.
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.
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"
.