Encontrar archivos con un asterisco (*) en el nombre del archivo

Encontrar archivos con un asterisco (*) en el nombre del archivo

¿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 findque 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 * ),

información relacionada