Почему «find» не показывает этот файл?

21

Используя findс grep, можно найти файлы, которые соответствуют шаблону:

# find | grep error
./solr-modifiedSolr4/SolrPhpClient/phpdocs/errors.html
./error_log
./includes/classes/error_log

Однако, используя findтолько первый файл не найден:

# find . -name error*
./error_log
./includes/classes/error_log

Почему не findнаходит errors.htmlфайл, когда не используется с grep? Как findиспользуется, чтобы показать этот файл, а?

dotancohen
источник

Ответы:

42

Вам нужно процитировать ваш аргумент, error*потому что оболочка его расширяет. Итак, что вы на самом деле сейчас выполняете find -name error_log, так это то, к чему оболочка может его развернуть ( error_logв вашем текущем каталоге есть файл ).

find . -name 'error*'

Является ли правильный вызов для вашего варианта использования.

Деннис Каарсемакер
источник
12
альтернативное написание find -name error\*- на одну клавишу меньше нажимать;) это имеет тот же эффект, что *передается в виде буквенной звездочки в команду find и не расширяется вашей оболочкой
женеч
3
Если возникают проблемы с оболочкой (как она интерпретирует вашу командную строку и передает все аргументы и параметры фактической команде), повторно запустите команду, добавив ее к echoкоманде. Итак, если бы вы запустили echo find . -name error*его, то find . -name error_log
выдали