Usando find para retornar certos nomes de arquivos (sem caminho) em um diretório

0

Eu gostaria de usar find para retornar arquivos com um nome de arquivo específico, neste caso: Arquivos que não começam com _ .

Eu aprendi que poderia usar

find . ! '(' -name '_*' ')'

Mas, quero que ele retorne os nomes dos arquivos sem o nome de caminho anterior. Existe alguma maneira que eu poderia usar cmd basename para fazer isso em bash?

Também agradeço qualquer outro comando, como ls , que pode fazer isso.

    
por obidyne 13.02.2018 / 21:32

3 respostas

1

Sim, você pode usar basename - passando-o como um argumento para a ação -exec :

find . ! -name '_*' -exec basename {} \;

(seus parênteses de agrupamento são desnecessários, já que não há nenhum problema de precedência do operador).

Como alternativa, se você tiver o GNU find , sua ação -printf fornecerá um especificador de formato para o nome de arquivo simples:

     %f     File's  name  with  any leading directories removed (only
            the last element).

então

find . ! -name '_*' -printf '%f\n'
    
por 14.02.2018 / 01:05
1

O formulário correto é como abaixo, bem como se você quiser que nome do arquivo seja impresso, usando find e shell (POSIX sh/bash/Korn/zsh) parameter substitution expansion .:

find /path/to -type f -name "[!_]*" -exec sh -c 'printf "%s\n" "${1##*/}"' _ {} \;

Ou podemos usar a combinação find with -execdir se você não se importa com o ./ .

find /path/to -type f -name "[!_]*" -execdir printf '%s\n' {} +

Você também usaria find -type f ! -name "_*" ... .

    
por 13.02.2018 / 21:35
1
find . -type f ! -name "_*" -printf "%f\n"

O printf com %f é uma extensão GNU do POSIX find .

    
por 14.02.2018 / 00:31