¿Cómo encuentro archivos con un asterisco en el nombre del archivo? Otra forma de hacer la pregunta es: ¿cómo consigo que un asterisco NO se comporte como un comodín?
Normalmente, para un comodín, haría algo como esto:
$ find ./ -type f \( -iname \*.jpg \)
Si no escapo *
me sale lo siguiente
$ find ./ -type f \( -iname * \)
find: paths must precede expression: .....
find: possible unquoted pattern after predicate `-iname'?
Dado que el error sugiere que es *
necesario citar, lo intenté find ./ -type f \( -iname "*" \)
o find ./ -type f \( -iname '*' \)
pero esto también funciona como comodín.
Respuesta1
La solución correcta parece ser utilizar corchetes [ ]
. Por supuesto que lo resolví 5 minutos después de la publicación. Espero que esto ayude a alguien en el futuro.
$ find . -name '*[*]*' -type f
Aunque también se puede utilizar una barra invertida para escapar del *
forfind
$ find . -name '*\**' -type f
Las comillas individuales se utilizan para asegurarse *
y pierden el significado especial [
que \
también tienen parala cáscara.
Respuesta2
Ten cuidado. De lo que se queja find(1) es de algo bastante diferente. Digamos que en el directorio actual tiene archivos a
, b
, c
. Si llamas por ejemplo:
find ./ -type f \( -iname * \)
lo find
que obtiene es ./ -type f ( -iname a b c )
(shell expande '*' antes de pasarle la línea de comando resultante, los paréntesis están entre comillas; exactamente el mismo resultado para ***
). Si tú escribes:
find ./ -type f \( -iname \* \)
se pone ./ -type f ( -iname * )
,