Encontrando caracteres especiais no nome

0

Como faço para encontrar arquivos que tenham ~ * e outros caracteres especiais no nome?

por exemplo,

find . -name "*\*"

deve corresponder a "qualquer caractere" e, em seguida, * , mas não corresponde a nada; Como posso obter o comando para corresponder corretamente os arquivos?

    
por trolkura 04.05.2016 / 10:21

2 respostas

1

As implementações de find variam, mas todas devem lidar com classes de caracteres em curingas (POSIX.2, seção 3.13):

find . -name '*[~*]*'

Se a nova linha estiver entre os caracteres "especiais", talvez seja necessário descobrir como fazer com que o seu shell passe para encontrar. No Bash, você pode usar

find . -name $'*[\t \n]*'

para mostrar arquivos contendo espaço em branco, por exemplo. Um método mais simples, se suportado, é usar uma classe de caractere:

find . -name '*[[:space:]]*'
    
por 04.05.2016 / 13:17
2

Se você quiser algo mais geral do que corresponder a um caractere específico, você teria que usar expressões regulares. Como a questão não está marcada como "linux", a resposta correta seria usar POSIX:

find . | grep '[*~]'

Se você quiser torná-lo específico para o Linux, você pode usar o find opção% -regex (também suportado por FreeBSD ). Se o nome do caminho tiver uma nova linha incorporada ( raramente feita, mas usada como um contraexemplo frequente ), POSIX find + grep não funcionará. Mas com a extensão -regex , isso "funciona" para imprimir nomes que tenham novas linhas incorporadas:

find . -regextype posix-awk -regex '.*[*~]'

embora a maneira em que encontrar é usado não faz parte da questão.

Leitura adicional:

por 04.05.2016 / 10:31