Это правильно:
$ 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]
command-line
find
Том Брито
источник
источник
./sub/domain.o
, который он не нашел.Ответы:
Вероятно, существует более одного совпадающего файла
*.o
, в то время как совпадает только один файл*main.o
, поэтому в первом случае запускается расширение оболочки:и это работает. Во втором случае:
И вот почему вы получили ошибку.
Чтобы предотвратить это, вы должны заключить
expression
в обе команды:источник
echo *.o
противecho '*.o'
.*
,?
), bash будет рассматривать его как буквенный символ.Поместите шаблон файла в кавычки. В противном случае * расширяется оболочкой (разрешается в список файлов, прежде чем find ее видит), что приводит к путанице в find.
источник
*
с обратной косой чертой:find -name \*.o