Почему я могу найти * main.o, но не могу * .o?

19

Это верно:

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

Итак, почему я не могу найти *.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]
    
задан Tom Brito 15.10.2014 в 23:39
источник

2 ответа

46

Возможно, существует более одного файла, который соответствует *.o , тогда как только один файл соответствует *main.o , поэтому в первом случае выполняется расширение оболочки:

$ find . -name main.o

и это работает. Во втором случае:

$ find . -name file1.o main.o

И вот почему вы получили ошибку.

Чтобы предотвратить это, вы должны указать expression в обеих командах:

$ find . -name '*.o'
$ find . -name '*main.o'
    
ответ дан Lety 15.10.2014 в 23:55
источник
17

Поместите шаблон файла в кавычки. В противном случае * расшифровывается оболочкой (разрешается список файлов, прежде чем find видит), запутывая find.

find . -name "*.o"
    
ответ дан Stefan Haustein 15.10.2014 в 23:53