Próbuję przeprowadzić wyszukiwanie tekstowe w niektórych plikach o podobnej strukturze katalogów, ale nie w tym samym drzewie katalogów w systemie GNU / Linux.
Mam serwer WWW z wieloma witrynami, które mają tę samą strukturę drzewa (framework PHP Igniter MVC PHP), dlatego chcę wyszukać w określonym katalogu w dół drzewa dla każdej witryny, na przykład:
/srv/www/*/htdocs/system/application/
Gdzie * to nazwa strony. I z tych katalogów aplikacji chcę przeszukać całe drzewo, aż do jego liści, w poszukiwaniu pliku * .php, który ma wewnątrz pewien wzorzec tekstowy, powiedzmy „debuguj” (nie wymaga wyrażenia regularnego).
Wiem, jak używać find i grep, ale nie jestem dobry w ich łączeniu.
Jak mam to zrobić?
Z góry dziękuję!
find /srv/www/*/htdocs/system/application/ -name "*.php" -print0 | xargs -0 grep "debug ("
GNU find
może wymagać od+
operatora zamiast\;
wykonania tego samego rodzaju wykonywania pojedynczego procesu, coxargs
robi. W ten sposóbfind /srv/www/*/htdocs/system/application/ -name "*.php" -exec grep -H "debug (" {} +
robi to samo, co wxargs
przykładzie w tej odpowiedzi, ale z jednym rozwidleniem procesu (i nadal 0 ryzykiem problemów z nazwą pliku).find
nie jest nawet potrzebny w tym przykładzie, można użyćgrep
bezpośrednio (przynajmniejGNU grep
):i jesteśmy do jednego rozwidlenia procesu.
Opcje:
-R, --dereference-recursive Read all files under each directory, recursively. Follow all symbolic links, unlike -r.
-H, --with-filename Print the file name for each match. This is the default when there is more than one file to search.
--include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude).
--exclude=GLOB Skip any command-line file with a name suffix that matches the pattern GLOB, using wildcard matching; a name suffix is either the whole name, or any suffix starting after a / and before a +non-/. When searching recursively, skip any subfile whose base name matches GLOB; the base name is the part after the last /. A pattern can use *, ?, and [...] as wildcards, and \ to quote a wildcard or backslash character literally.
źródło
-RH
oznaczają te opcje?man grep
fragment opisu opcji do postu.Twoja powłoka może znaleźć pliki php i przekazać je grep. W bash:
źródło