Por que eu consigo encontrar * main.o mas não consigo * .o?

19

Este é 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]
    
por Tom Brito 16.10.2014 / 01:39
fonte

2 respostas

46

Provavelmente, há mais de um arquivo que corresponde a *.o , enquanto apenas um arquivo corresponde a *main.o , portanto, no primeiro caso, a expansão do shell é executada:

$ find . -name main.o

e isso funciona. No segundo caso:

$ find . -name file1.o main.o

E é por isso que você tem erros.

Para evitar isso, você deve citar expression em ambos os comandos:

$ find . -name '*.o'
$ find . -name '*main.o'
    
por Lety 16.10.2014 / 01:55
fonte
17

Coloque o padrão de arquivo entre aspas. Caso contrário, * é expandido pelo shell (resolvido para uma lista de arquivos antes que o encontre o veja), confundindo o find.

find . -name "*.o"
    
por Stefan Haustein 16.10.2014 / 01:53
fonte