Este es correcto:
$ find . -name *main.o
./main.o
Entonces, ¿por qué no puedo encontrar *.o?
$ find . -name *.o
find: paths must precede expression: main.o
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
command-line
find
Tom Brito
fuente
fuente

./sub/domain.o, que no encontró.Respuestas:
Probablemente hay más de un archivo que coincide
*.o, mientras que solo un archivo coincide*main.o, por lo que, en el primer caso, se ejecuta la expansión de shell:Y esto funciona. En el segundo caso:
Y es por eso que tienes un error.
Para evitar esto, debe citar
expressionen ambos comandos:fuente
echo *.ovsecho '*.o'.*,?) bash lo tratará como el carácter literal.Ponga el patrón del archivo entre comillas. De lo contrario, el shell expande * (se resuelve en una lista de archivos antes de que find lo vea), lo que confunde find.
fuente
*con una barra invertida:find -name \*.o