Zaawansowane wyszukiwanie z użyciem find i grep
1. find – wyszukiwanie plików i katalogów
find /ścieżka -iname "wzorzec"
Szukamy plików lub katalogów według nazwy ze zignorowaniem wielkości liter (opcja -iname).
Przykład: find /var/log -iname "*.LOG" znajdzie wszystkie pliki z rozszerzeniem .log lub .LOG.
find . -type f
Szukamy wyłącznie zwykłych plików w bieżącym katalogu i jego podkatalogach. (-type f = file)
find . -type d
Szukamy tylko katalogów. (-type d = directory)
find /home -mtime -7
Wyszukujemy pliki zmodyfikowane w ciągu ostatnich 7 dni. (-mtime to czas modyfikacji, -7 oznacza mniej niż 7 dni temu)
find /var/www -size +10M
Wyszukujemy pliki większe niż 10 megabajtów. (+10M oznacza większe niż 10MB)
Co oznaczają opcje:
-iname– wyszukiwanie nazwy pliku bez zwracania uwagi na wielkość liter.-name– wyszukiwanie nazwy pliku uwzględnia wielkość liter.-type f/d/l– filtr według typu: f = plik zwykły, d = katalog, l = link symboliczny.-mtime N– pliki modyfikowane dokładnie N dni temu;-mtime -N– zmodyfikowane w ciągu ostatnich N dni.-size +N– pliki większe niż N jednostek (k, M, G).
2. grep – wyszukiwanie tekstu wewnątrz plików lub strumieni danych
grep "wzorzec" plik.txt
Wyszukuje linie zawierające wzorzec w podanym pliku.
grep -i "blad" plik.txt
Ignoruje wielkość liter, znajdzie "blad", "Blad", "BLAD" itd.
grep -r "error" /var/log
Rekurencyjnie wyszukuje słowo "error" we wszystkich plikach w katalogu /var/log.
grep -n "start" plik.txt
Wyświetla numer linii, w której znaleziono dopasowanie.
grep -c "fail" plik.txt
Liczy liczbę linii, które zawierają "fail".
grep -v "warning" plik.txt
Wyświetla linie, które nie zawierają słowa "warning".
grep -l "TODO" *.c
Wyświetla tylko nazwy plików z rozszerzeniem .c, w których znaleziono słowo "TODO".
Opisy opcji:
-i– ignoruj wielkość liter;-r– rekurencyjne przeszukiwanie katalogów;-n– pokazywanie numerów linii;-c– liczenie wystąpień;-v– negacja wzorca (linia nie zawiera wzorca);-l– pokazuje tylko nazwy plików z dopasowaniem.
3. Łączenie find z grep – wyszukiwanie wzorców tekstowych w określonych plikach
find /var/www -type f -name "*.php" -exec grep -l "mysqli_connect" {} \;
Znajduje wszystkie pliki .php w katalogu /var/www, które zawierają tekst "mysqli_connect".
find /var/www -type f -iname "*.conf" -exec grep -iH "server" {} \;
Znajduje pliki konfiguracyjne (bez zwracania uwagi na wielkość liter w nazwie) zawierające słowo "server" (ignorując wielkość liter, pokazując nazwy plików i linie).
find . -iname "test*" -print0 | xargs -0 grep -l "error"
Wyszukuje pliki zaczynające się na "test" i sprawdza, czy zawierają słowo "error". Bezpieczne dla nazw z odstępami dzięki -print0 i xargs -0.
Praktyczne wskazówki
- Używaj
-inamew find, jeśli nie jesteś pewien wielkości liter w nazwach plików. - Łącz
findzgrepprzy pomocy-execlubxargs, aby wyszukiwać w treści plików wybrane wzorce. - Opcje
grep-ri--includepozwalają filtrować rekurencyjne wyszukiwania wg typu plików. - Przetestuj zapytania na mniejszych katalogach dla sprawdzenia wyników przed uruchomieniem na dużych strukturach.
Podsumowanie
find i grep to podstawowe, lecz bardzo potężne narzędzia do wyszukiwania plików i danych w nich zawartych, ich właściwe stosowanie znacząco ułatwia administrowanie systemami i skryptowanie operacji.