Рекурсивно искать файлы с заданным именем и находить экземпляры определенной фразы И отображать путь к этому файлу. - PullRequest
10 голосов
/ 22 августа 2010

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

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

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

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

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

Ответы [ 2 ]

10 голосов
/ 22 августа 2010

попробуйте это:

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

примечание: фактически не тестировалось в MSYS.

0 голосов
/ 22 августа 2010

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

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

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

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

...