Найти подстроки в определённых типах файлов по серверу. Связка в потоке find, grep, xargs

Бывает так, что необходимо найти подстроки только в файлах с определённым расширением и типом. Или в файлах содержащих определённые символы в названии. Мы конечно можем использовать команду grep -r ‘подстрока’ и перелопатить всё на сервере в поисках данной подстроки, но это не практично и нагружает сервер по полной. Например нам нужно найти все файлы, где устанавливается глобальная переменная mysql long_query_time. Мы выполняем:

И видим совершенное непотребство:

grep -r
grep -r ‘long_query_time’

Абсолютный трэш, сервер грузится на соточку и находится не совсем то, что нужно. Мы конечно можем отфильтровать этот поток ещё одним grep, однако от лишней нагрузки не уйти. Но, мы знаем, что нам нужны лишь файлы с расширением .cnf, поэтому сначала командой find найдем все файлы с данным расширением, передадим поток xargs и применим grep для каждого пути:

find . -name "*.cnf" | xargs grep -n long_query_time
find . -name «*.cnf» | xargs grep -n long_query_time

Прогресс на лицо. Нашлось только требуемое и только в нужных нам файлах. Потренируемся ещё, найдём на сервере .php файлы в которых применяется функция phpinfo()

find . -name "*.php" | xargs grep -n 'phpinfo();'
find . -name «*.php» | xargs grep -n ‘phpinfo();’

Прекрасные результаты! А главное — быстро и недорого. Теперь немножко добавим регулярочку и найдём в html файлах на сервере все строки содержащие слова warning и developer

find . -name "*.html" | xargs grep -n -e "warning.*developer"
find . -name «.html» | xargs grep -n -e «warning.developer»

Вот так просто и быстро находить всё необходимое в linux. Ничего не пропустишь.

Оставить комментарий

Ваш адрес email не будет опубликован.