![Рекурсивный поиск определенного текста внутри определенных файлов, но только в определенных папках](https://rvso.com/image/1345296/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B8%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%2C%20%D0%BD%D0%BE%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B2%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0%D1%85.png)
У меня есть вложенная структура папок, содержащая множество папок и файлов.
Как выполнить поиск внутри файлов по шаблону, например, «sampletext», но только если имя файла соответствует шаблону (например, выполнять поиск только внутри файлов с расширением .txt) и, наконец, имя содержащей его папки должно соответствовать другому шаблону? (например, «data»).
Я уверен, что смогу написать скрипт оболочки, чтобы сделать это, но я уверен, что существуют умные однострочники, которые научат меня чему-то новому!
заранее спасибо
решение1
Поскольку вы говорите, что у вас вложенная структура папок, я считаю, *data*/*txt
что это не то, что вам нужно. Я предлагаю
find . –type d –name "*data*" –exec sh –c "grep sampletext /dev/null {}/*.txt" \;
Он /dev/null
нужен для принудительного grep
отображения имени файла, даже если он запущен в каталоге, .txt
в котором находится только один файл.