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 ./
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
wc -l : zlicza ilość linii na standardowym wyjściu
Znajdowanie ciagu tekstu w wielu plikach
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:
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:
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
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 !!!
W powyższym przykładzie zostaną wyświetlone wszystkie pliki poza plikami z rozszerzeniem log