Przeszukiwanie plików danego typu pod kątem tekstu

Kiedyś poproszono mnie o przeszukanie wszystkich plików php na serwerze webowym po kątem wywołania pewnej funkcji. Oczywiste wydało mi się użycie rekurencyjnie grep’a, więc:

grep -R "JAKAS_FUNKCJA" /var/www/*.php

Ale szybko okazało się że grep dopasowuje maskę *.php również do katalogów, więc nie przeszukiwał katalogów które nie kończyły się na .php ehhh…..

Drugie podejście okazało się trafniejsze – najpierw poleceniem find wyszukuję wszystkie pliki php, a dopiero później grepuję (wypisując nazwę pliku i numer linii):

find /var/www/ -iname '*.php' -print0 | xargs -0 -I'{}' sh -c 'grep -iHn "JAKAS_FUNKCJA" "{}"'

Przykładowo wynik:

find /var/www -iname '*.php' -print0 | xargs -0 -I'{}' sh -c 'grep -iHn "eval(" "{}"'
/var/www/*****/wp-admin/press-this.php:208: var my_src = eval(
/var/www/*****/wp-admin/press-this.php:219: var my_src = eval(
/var/www/*****/wp-admin/press-this.php:402: eval(data);
/var/www/*****/wp-admin/includes/class-pclzip.php:4063:// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
/var/www/*****/wp-includes/class-phpmailer.php:1916: //TODO using /e (equivalent to eval()) is probably not a good idea
/var/www/*****/wp-includes/class-json.php:22: * Javascript, and can be directly eval()'ed with no further parsing
/var/www/*****/wp-includes/functions.php:190: if ( doubleval($bytes) >= $mag )

One thought on “Przeszukiwanie plików danego typu pod kątem tekstu”

  1. W rozmowie z kumplem wyszło jeszcze inne zastosowanie podobnego polecenia, do zastępowania ciągów znaków w pewnych typach plików:

    find /var/www/ -iname '*.php' -print0 | xargs -0 -I'{}' sh -c 'sed -i "s#wzorzed#podstawienie#" "{}"'

Leave a Reply

Your email address will not be published. Required fields are marked *