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