Perché posso trovare * main.o ma non posso * .o?

19

Questo è corretto:

$ find . -name *main.o
./main.o

Quindi, perché non riesco a trovare *.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]
    
posta Tom Brito 16.10.2014 - 01:39

2 risposte

46

Probabilmente ci sono più file che corrispondono a *.o , mentre solo un file corrisponde a *main.o , quindi, nel primo caso, l'espansione della shell viene eseguita:

$ find . -name main.o

e questo funziona. Nel secondo caso:

$ find . -name file1.o main.o

E questo è il motivo per cui hai sbagliato.

Per evitare ciò, devi citare expression in entrambi i comandi:

$ find . -name '*.o'
$ find . -name '*main.o'
    
risposta data Lety 16.10.2014 - 01:55
17

Metti il ​​modello del file tra virgolette. Altrimenti, * viene espanso dalla shell (risolto in un elenco di file prima che find lo veda), find confuso.

find . -name "*.o"
    
risposta data Stefan Haustein 16.10.2014 - 01:53

Leggi altre domande sui tag