Este está correto:
$ find . -name *main.o
./main.o
Então, por que não consigo 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
fonte
fonte
./sub/domain.o
, que não foi encontrado.Respostas:
Provavelmente, há mais de um arquivo que corresponde
*.o
, enquanto apenas um arquivo corresponde*main.o
; portanto, no primeiro caso, a expansão do shell é executada:e isso funciona. No segundo caso:
E é por isso que você obteve erro.
Para evitar isso, você deve citar
expression
nos dois comandos:fonte
echo *.o
vsecho '*.o'
.*
,?
) bash o tratará como o caractere literal.Coloque o padrão do arquivo entre aspas. Caso contrário, * é expandido pelo shell (resolvido para uma lista de arquivos antes que a localização a veja), a localização confusa.
fonte
*
com uma barra invertida:find -name \*.o