Localizando arquivos com um asterisco (*) no nome do arquivo

Localizando arquivos com um asterisco (*) no nome do arquivo

Como encontro arquivos com um asterisco no nome do arquivo? Outra maneira de fazer a pergunta é: como faço para que um asterisco NÃO se comporte como um curinga?

Normalmente, para um curinga, eu faria algo assim:

$ find ./ -type f \( -iname \*.jpg \)

Se eu não escapar, *recebo o seguinte

$ find ./ -type f \( -iname * \)
find: paths must precede expression: .....
find: possible unquoted pattern after predicate `-iname'?

Como o erro sugere a *necessidade de ser citado, tentei find ./ -type f \( -iname "*" \)ou find ./ -type f \( -iname '*' \), mas também funciona como um curinga.

Responder1

A solução correta parece ser usar colchetes [ ]. Claro que resolvi 5 minutos depois de postar. Espero que isso ajude alguém no futuro.

$ find . -name '*[*]*' -type f

Embora também seja possível usar a barra invertida para escapar do *forfind

$ find . -name '*\**' -type f

Citações simples são usadas para ter certeza e *perdem o significado especial que também têm para[\A concha.

Responder2

Tome cuidado. O que find(1) está reclamando é algo bem diferente. Digamos que no diretório atual você tenha arquivos a, b, c. Se você ligar, por exemplo:

find ./ -type f \( -iname * \)

o que findacontece é ./ -type f ( -iname a b c )(o shell expande '*' antes de entregar a linha de comando resultante para ele, os parênteses são citados; exatamente o mesmo resultado para ***). Se você escrever:

find ./ -type f \( -iname \* \)

fica ./ -type f ( -iname * ),

informação relacionada