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 find
acontece é ./ -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 * )
,