Этот корректен:
$ 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]
Вероятно, существует больше чем один файл, которые соответствуют *.o
, в то время как только одно соответствие файла *main.o
, таким образом, в первом случае, расширение оболочки работает:
$ find . -name main.o
и это работает. Во втором случае:
$ find . -name file1.o main.o
И это - то, почему Вы получили ошибку.
для предотвращения этого, необходимо заключить в кавычки expression
в обеих командах:
$ find . -name '*.o'
$ find . -name '*main.o'
Поместите шаблон файла в кавычки. Иначе, * расширен оболочкой (разрешенный к списку файлов, прежде чем найдут, видит его), запутывающая находка.
find . -name "*.o"