Skip to main content

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 -iname w find, jeśli nie jesteś pewien wielkości liter w nazwach plików.
  • Łącz find z grep przy pomocy -exec lub xargs, aby wyszukiwać w treści plików wybrane wzorce.
  • Opcje grep -r i --include pozwalają 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.