¿Por qué puedo encontrar * main.o pero no puedo * .o?

19

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]
    
pregunta Tom Brito 15.10.2014 - 23:39

2 respuestas

46

Probablemente haya más de un archivo que coincida con *.o , mientras que solo un archivo coincida *main.o , por lo que, en el primer caso, se ejecuta la expansión del shell:

$ find . -name main.o

y esto funciona En el segundo caso:

$ find . -name file1.o main.o

Y esta es la razón por la que obtuviste un error.

Para evitar esto, debe citar expression en ambos comandos:

$ find . -name '*.o'
$ find . -name '*main.o'
    
respondido por el Lety 15.10.2014 - 23:55
17

Coloque el patrón de archivo entre comillas. De lo contrario, * se expande por el shell (se resuelve en una lista de archivos antes de que find lo vea), confundiendo find.

find . -name "*.o"
    
respondido por el Stefan Haustein 15.10.2014 - 23:53

Lea otras preguntas en las etiquetas