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

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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