Почему я могу найти *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]

2 ответа

Решение

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

$ find . -name main.o

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

$ find . -name file1.o main.o

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

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

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

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

find . -name "*.o"
Другие вопросы по тегам