Como encontrar arquivos com nomes com uma longa cadeia depois do primeiro ponto

4

Meu Samsung Galaxy S não gosta de arquivos em que o nome contenha uma string longa após o primeiro ponto. Eu acho que alguma parte do software tem um buffer muito curto para a extensão do arquivo. Como posso encontrar todos os arquivos no meu cartão Micro-SD montado em / media / sd, onde o nome do arquivo tem mais de cinco caracteres após o primeiro ponto?

Lendo a manpage find, pensei

find . -regex '.*\..\{5,\}'

funcionaria, mas não fornece resultados, então, de alguma forma, não consigo expressar minha expressão regularmente.

    
por fschmitt 17.11.2010 / 22:52

2 respostas

4

O problema é que o tipo padrão de regex usado pelo find é o estilo emacs. A documentação não inclui a construção \{n,\} - levando-me a acreditar que ela não é suportada na implementação de find de expressões regulares no estilo emacs. O emacs-wiki lista isso como válido , no entanto, é possível que isso nem sempre tenha sido o caso.

Descobri que o seu regex produziu a saída se você fizer isso:

$ find . -regextype posix-basic -regex '.*\..\{5,\}'
    
por 17.11.2010 / 23:18
2

As chaves nem sempre são incluídas nas implementações básicas de regexp. Eu não sei se você tem o GNU find ou o Busybox find; O Busybox pode não ter todos os recursos do GNU encontrado.

Uma maneira portátil de procurar arquivos com uma extensão longa é find . -name '*.?????*' .

Observe que seu regexp corresponderia à maioria dos arquivos em um diretório cujo nome contenha um ponto.

    
por 17.11.2010 / 23:30