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
expression
en ambos comandos:fuente
echo *.o
vsecho '*.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