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

Этот корректен:

$ 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]
19
задан 16 October 2014 в 12:08

2 ответа

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

$ find . -name main.o

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

$ find . -name file1.o main.o

И это - то, почему Вы получили ошибку.

для предотвращения этого, необходимо заключить в кавычки expression в обеих командах:

$ find . -name '*.o'
$ find . -name '*main.o'
46
ответ дан 23 November 2019 в 01:55

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

find . -name "*.o"
16
ответ дан 23 November 2019 в 01:55

Другие вопросы по тегам:

Похожие вопросы: