Como usar o comando “find” para listar arquivos com tamanho de nome de arquivo específico?

3

Na minha pasta eu tenho arquivos como

/data/filename.log /data/filename.log.1 /data/filename.log.2 /data/filenamefilenamefilename.log /data/filenamefilenamefilename.log.2

Eu desejo usar o comando "find" para listar arquivos com tamanho maior que 15 caracteres.

Eu tentei o seguinte, mas nenhum deles funciona:

find ./ -type f -iregex "/^.*{15,1000}$/" -print
find ./ -type f -iregex "/^.*{15}$/" -print
find ./ -type f -iregex "^.*{15}$" -print
find ./ -type f -iregex ".*{15}" -print
find ./ -type f -iregex ".{15}" -print
find ./ -type f -iregex ".{15,1000}" -print

Não sabe qual é o caminho correto?

Obrigado!

    
por forestclown 11.04.2012 / 13:39

2 respostas

3

Eu sugeriria a versão de Paul se você quiser corresponder apenas ao nome do arquivo. Se você quiser usar -regex para corresponder ao caminho completo, poderá fazer isso, por exemplo.

find /data -type f -regextype posix-egrep -regex ".{15}"

ou por 15 ou mais caracteres

find /data -type f -regextype posix-egrep -regex ".{15}.*"

Verifique na página man os diferentes mecanismos regexp disponíveis para usar com -regextype .

Você também pode usar a opção -regex para procurar apenas nomes de arquivos com 15 caracteres:

find /data -type f -regextype posix-egrep -regex ".*/[^/]{15}"

ou 15 ou mais caracteres:

find /data -type f -regextype posix-egrep -regex ".*[^/]{15}"
    
por 11.04.2012 / 15:11
6

O parâmetro name aceita globbing simples, portanto, o seguinte funcionará:

 find . -type f -name '????????????????*'

São 16 pontos de interrogação, seguidos por um asterisco. O ponto de interrogação corresponde a um único caractere, mas ele deve corresponder, portanto, 16 deles em sequência garantem que haja 16 caracteres no nome do arquivo. O asterisco no final permite qualquer caractere adicional, atendendo ao requisito "maior que 15 caracteres", combinando "16 ou mais caracteres".

    
por 11.04.2012 / 14:43