Wyszukiwanie plików i tekstu w plikach – find i grep

Jak szybko wyszukać odpowiednie pliki lub ewentualnie treść ( ciąg znaków ) w wielu plikach pracując w konsoli systemowej na systemach Unix/Linux/OS X ?
Z pomocą przychodzą polecenia konsolowe: find i grep. A dzięki potokom „|” czyli przekierowaniu wyjścia jednego programu do wejścia drugiego możemy połączyć oba polecenia mieć wyjątkowo uniwersalne narzędzie do szczegółowego przeszukiwania plików i tekstu w plikach.

Polecenie find jest potężnym narzędziem z ogromną ilością opcji, dlatego zaprezentuje tu tylko te podstawowe i najbardziej przydatne, także poprzez łączenie polecenia find z poleceniem grep.

Samo wywołanie polecenia find z podaną ścieżką da nam tylko listę wszystkich plików i katalogów znajdujących się w podanej ścieżce ( działa rekurencyjnie – bierze pod uwagę podkatalogi )

Znajdowanie plików

Proste wyszukiwanie plików wg wzorca ( wyrażenia regularne ). Wyszukanie wszystkich plików z rozszerzeniem php w bierzącym katalogu ./

user@server:$ find ./ -type f -iname "*.php"

Składnia to: find [sciezka do katalogu] [opcje]

Opcje:
-type f : wyświetla tylko nazwy plików ( bez katalogów ). Np. literka d będzie pokazywać tylko katalogi
-iname : nie bierze pod uwagę wielkości liter. Np. Linux i linuX to będzie to samo. – co ma zawierać nazwa pliku

Ilość znalezionych plików

user@server:$ find ./ -type f -iname "*.php" | wc -l

wc -l : zlicza ilość linii na standardowym wyjściu

Znajdowanie ciagu tekstu w wielu plikach

user@server:$ find ./ -type f -iname "*.php" | xargs grep -i -l "szukana fraza"

Oczywiście możemy „doczepić” jeszcze jeden potok np. | wc -l i mamy ilość plików zawierających szukaną frazę :)
Co do polecenia xargs, jest to bardzo przydatny programik, działa on tak, iż pobiera ze standardowego wyjścia ( w naszym przypadku to co „wypluje” find i dokleja to jako argumenty.
Tak więc w naszym przypadku xargs robi coś na wzór:


grep -i -l "szukana fraza" [tutaj xargs dokleja to co dostał z find]

A więc będzie to odpowiednik:

user@server:$ grep -i -l "szukana fraza" plik1

Opcje dla grep:
-i : nie bierze pod uwagę wielkości liter
-l : zamiast wyświetlenia całej linii ze znalezionym tekstem, to wyświetla nazwę pliku ze znalezioną frazą

Wyszukiwanie plików pod względem ich wielkości

Czasem potrzebujemy znaleźć pliki, które są większe lub mniejsze od podanej wartości:

user@server:$ find ./ -type f -size +100M

W tym wypadku zostaną wyświetlone tylko te pliki, które są większe niż 100MB.
Aby szukać mniejszych plików od podanej wartości zamieniamy znaczek + na przed wartością liczbową.
Za wartościa liczbową możemy wstawić następujące litery:


-k : kilobajty
-M : megabajty
-G : gigabajty

bez literki za wartością liczbową domyślnie liczba będzie określała wartość w bajtach.

Wykorzystanie operatorów logicznych

Aby bardziej sprecyzować warunki dotyczące wyszukiwania plików, możemy posłużyć się operatorami logicznymi.
A więc wykorzystujemy 3 podstawowe operatory logiczne:


-and : AND - czyli oba warunki muszą być spełnione
-or : OR - chociaż jeden z warunków musi zostać spełniony
! : NEGACJA - wyklucza podany warunek

user@server:$ find ./ -iname "*\.php -and -size +100k

W tym przypadku zostaną wyświetlone tylko i wyłącznie pliki z rozszerzeniem php ( bez brania pod uwagę wielkości liter ) i jednocześnie musi być spełniony drugi warunek – czyli pliki powyżej 100KB.

UWAGA: Dla negacji nie dajemy myślnika !!!

user@server:$ find ./ ! -iname "*\.log"

W powyższym przykładzie zostaną wyświetlone wszystkie pliki poza plikami z rozszerzeniem log

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


4 × dziewięć =

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre user="" computer="" escaped="">