1

Я ищу файлы на моем сервере, содержащие текстовую строку "sometext" , но я хочу исключить поиск в папке /var/www/sometext (и ее подпапках).

Итак, я сделал следующее:

grep -rl "sometext" / --exclude-dir=/var/www/sometext

Однако было 2 проблемы:

  1. Результаты все еще содержали файлы из папки, которую я хотел исключить, и

  2. grep итоге зависает (изображение ниже)


Мои вопросы:

  1. Почему grep возвращает файлы из папки, которую я хочу исключить?

  2. Зачем зависать grep , а также, после того, как он зависнет, как мне снова получить приглашение?

  3. Дополнительный вопрос: как добавление конечной звездочки в спецификации исключенной папки изменит результаты --exclude-dir=/var/www/sometext*?

1 ответ1

2

Вопросы 1 и 3 связаны и могут быть даны ответы одновременно. Согласно справочной странице grep (выделено мое):

--exclude-DIR = DIR

Исключить каталоги, соответствующие шаблону DIR, из рекурсивных поисков.

Таким образом, с помощью этой опции вы указываете шаблон, а не сам каталог, то есть /var/www/sometext* или даже /var/www/sometext/* будут расширяться и соответствовать любому файлу / подкаталогу указанного (второй еще точнее, поскольку первый может совпадать с другими каталогами, чье имя начинается с sometext .

Вопрос 2 можно объяснить, потому что вы, вероятно, grep ping внутри каталога /dev , который содержит все устройства системы и, в частности, некоторые из них считаются "бесконечными", например, /dev/zero , поэтому команда никогда не закончится , Рекомендуется использовать --exclude-dir для сопоставления со всеми специальными каталогами, такими как /dev , /sys и так далее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .