Como posso encontrar todos os arquivos em uma árvore de pastas que não contenham nenhum caractere alfanumérico?

3

Eu retomei de muitos dados históricos. No entanto, os nomes dos arquivos são IMHO totalmente aleatórios e mal formatados.

Para começar, quero obter uma lista de todos os arquivos que contenham espaços, ou qualquer caractere diferente de AZ, 0-9,., -, _ existe uma maneira de fazer isso com a sintaxe de regex na linha de comando Linux?

    
por StephenTrapped 11.09.2013 / 17:45

3 respostas

1

find . -type f | grep -i '[^a-z0-9\.\/_\-]'

Isso corresponderia a todos os arquivos que contêm um caractere diferente de a-z , 0-9 , um ponto, uma barra (para diretórios), um sublinhado ou um hífen-menos.

Observação: Isso não funcionará se um arquivo (ou caminho) contiver uma nova linha, porque o encadeamento para grep dividiria o caminho do arquivo em dois. Embora não seja muito comum, deve ser mencionado.

Uma solução simples com o Zsh (requer setopt EXTENDED_GLOB ):

ls -l **/*[^a-zA-Z0-9-_.]##*

O ** recursa nos diretórios e * corresponde a zero ou mais ocorrências de qualquer caractere. O padrão negado de caracteres na lista de permissões precisa ser correspondido pelo menos uma vez ( ## ).

    
por 11.09.2013 / 19:52
0

Se você tiver o comando locate, poderá fazer algo assim:

locate --basename --regex "[^0-9A-Za-z\.\_\-]"

Em sistemas centos, você pode instalar o locate executando yum -y install updatedb. Você precisará então executar o comando updatedb e depois executar o locate.

Nesse comando, o nome da base força o locate a procurar apenas o nome do arquivo e não o caminho completo do diretório, e o regex executa o reg expr fornecido neste nome de arquivo.

    
por 11.09.2013 / 21:16
-1

Isso destacará os arquivos estranhos, mas não os imprimirá somente:

find . -type f -maxdepth 1 | grep --color='auto' [[:alnum:]]

    
por 11.09.2013 / 17:55