Рекурсивно искать файлы с заданным именем и находить экземпляры конкретная фраза И отображение пути к этому файлу

У меня есть несколько папок и подпапок. Каждый содержит, среди прочего, текстовый файл с именем index.yml с полезными данными. Я хочу просмотреть все различные файлы index.yml , чтобы найти экземпляры строки поиска. Я должен видеть несколько строк контекста и каталог файла index.yml , который был найден.

Это почти работает, но не дает мне имя файла:

cat `find . -name 'index.yml'`| grep -i -C4 mySearchString

Как я могу сделать это и получить имя файла?

Я застрял в Windows с использованием msys. Заметьте, что у меня нет полного GNU grep, поэтому я не могу запустить grep --exclude или grep -R , как предложено в других вопросах SO.

10
задан AndyL 21 August 2010 в 21:06
поделиться

2 ответа

попробуйте следующее:

find -name "index.yml" -exec grep -i -H -C4 pattern {} \;

примечание: на самом деле не тестировалось под msys.

10
ответ дан 4 December 2019 в 01:29
поделиться

Одна возможность (я не знаю, что именно принимает msys):

 find . -name index.yml -exec grep -i -C4 mySearchString /dev/null {} +

/ dev / null служит для обеспечения как минимум двух путей, чтобы путь печатается при каждом совпадении. Аналогичный эффект имеет параметр -H команды grep.

Конструкция -exec ... + в find заставляет передавать несколько имен пути одному экземпляру команды. Если он не реализован, вам придется использовать -exec ... \; .

0
ответ дан 4 December 2019 в 01:29
поделиться