[#] Wyszukiwanie zaawansowane

( Ostatnio zmieniony pon., 02/06/2008 - 15:28 )
 

LOCATE – bardzo szybkie wyszukiwanie plików

Uaktualniamy bazę:

sudo updatedb

Wyszukujemy:

locate pliczek

WHEREIS – gdzie jest ten program (bardzo szybkie)

whereis echo

FIND  – wyszukiwanie plików

Proste wyszukanie plików z rozszerzeniem .txt w katalogu /home/tomek

find /home/tomek -name "*.txt"

j.w. ale pliki tylko zaczynające się na „rea“ z rozszerzeniem .txt (np.: readme.txt)

find /home/tomek -name "rea*.txt"

j.w. ale nie wiemy czy są to małe czy duże litery „rea“ (np.: ReAdme.TxT lub rEadme.txt)

find /home/tomek -iname "rea*.txt"

Zmieniając parametr „-name“ na „-iname“ (wyłączyliśmy rozróżnianie wielkości znaków)

j.w. ale poszerzone o parametr rozmiaru Tylko mniejsze od 100kB

find /home/tomek -iname "rea*.txt" -size -100k

Tylko równe 100kB

find /home/tomek -iname "rea*.txt" -size 100k

Tylko większe od 100kB

find /home/tomek -iname "rea*.txt" -size +100k

j.w. ale tylko pliki użytkownika tomek większe od 10MB

find /home -iname "*.avi" -size +10M -user tomek

j.w. ale pliki których właścicielem nie jest tomek i są większe od 100MB

find /home -iname "*.avi" -size +100M -not -user tomek

Wyświetlenie listy plików i ich rozmiarów posortowanych rosnąco

find "katalog/" -type f -name "*.mp3" -printf "%s %f\n" | sort -n -t' ' -k 1

Znajdujemy pliki o rozszerzeniach php, html oraz tpl

find katalog/ -regex ".*\(php\|html\|tpl\)$"

Znajdujemy pliki które inni mają prawo czytać

find /home/tomek -perm -o=r

Znajdujemy pliki które inni mają prawo czytać i wykonać

find /home/tomek -perm -o=rx

Zwróć uwagę na „-o“ – minus oznacza ze oba warunki muszą być spełnione ( nadane prawo odczytu i wkonania)

j.w. ale „albo albo“

find /home/tomek -perm +o=rx

Zwróć uwagę na „+o“ – plus oznacza, że te pliki są wyszukiwane, które inni mogą albo czytać, albo wykonać, albo czytać i wykonać jednocześnie.

Znajdujemy pliki, które dowolny (każdy) użytkownik może czytać

find /home/tomek -perm -ugo=r

lub te które może czytać użytkowników z dowolnej kategorii uprawnień (user, group lub other)

find /home/tomek -perm +ugo=r

Znajdujemy te pliki, które user, group, other mogą czytać , a tylko właściciel może zapisywać

find /home/tomek -perm ugo=r,u=w

Znajdujemy pliki, które nie mogą być odczytane przez innych (others)

find /home/tomek -not -perm +o=r

Suma sumarum tego co wyżej

find /home/tomek -iname "re*.txt" -size -100k -user tomek -not -perm +o=r -exec chmod o+r {} \;

Co oznacza: Znajdź bez rozróżniania wielkości znaków, pliki o rozszerzeniu .txt, w katalogu /home/tomek, których nazwa zaczyna się od „rea“, ich rozmiar nie przekracza 100kB, właścicielem jest użytkownik tomek i inni nie mają prawa ich czytać. Następnie dodaj uprawnienia innym (others) dla tych plików, zezwalając im na ich czytanie.

Inny przykład użycia skumulowanych opcji

find /home/tomek \( -iname "moje*" -or -name "twoje*" -or -name "*ich.txt" \) -and \( -size +1M -mtime 2 \)

Znajdź w katalogu /home/tomek pliki, których nazwa zaczyna się na „moje…“ (bez rozróżniania wielkości liter) lub nazwa zaczyna się dokładnie na „twoje…“ lub nazwa kończy się dokładnie na „…ich.txt“ i rozmiar znalezionego pliku jest większy od 1MB, a czas ostatniej modyfikacji to 2 dni.

GREP  – wyszukiwanie wyrażeń

Grep, podobnie jak find jest równie użytecznym narzędziem podczas wyszukiwania. W odróżnieniu od „find“, potrafi wyszukiwać tekstu wewnątrz plików lub ze standardowego wejścia.

Wyszukaj napis „Tomek Atomek“ w danym katalogu

grep "Tomek Atomek" *

Nie tyczy się to jednak podkatalogów. Aby to zmienić dodaj parametr „-r“:

grep -r "Tomek Atomek" *

Za każdym razem kiedy wyrażenie zostanie znalezione w pliku, nazwa tego pliku oraz linia z tekstem, w którym ono występuje są wyświetlane na ekran (co mocno zaciemnia wynik). Możesz mieć wpływ na to w jaki sposób grep będzie zwracał wynik, np. dodając parametr „-l“ (małe L) możemy otrzymać trochę mniej bałaganu (zwróci nam tylko nazwy plików które zawierają szukane wyrażenie – bez znaczenie ile krotnie.)

Dodatkowo możemy użyć parametru „-c“, który pokaże nam ile razy szukane wyrażenie występuje w plikach

grep -rc "Tomek Atomek" *

Zwróci nam wynik: /home/tomek/plik1­.txt:3 /home/tomek/.bashrc:0 /home/tomek/plik­.pdf:1 /home/tomek/waz­ne.doc:1

Wyszukaj linie z pliku pliczek.txt które nie zawierają słowa „Tomek“

grep -v "Tomek" pliczek.txt

lub zaiwerają słowo „Tomek“:

grep "Tomek" pliczek.txt

Wyrażenia regularne:

Wyszukaj w pliku wystąpień: Tomek Domek Romek

grep "[TDR]omek" pliczek.txt

j.w. ale bez rozróżniania wielkości liter Parametr „-i“ wyłącza rozróżnianie wielkośi liter: Tomek, DOMEK, RoMEK:

grep -i [tdr]omek pliczek.txt

Podświetl wynik pasujących elementów

grep -in --color [TDR]omek pliczek.txt

Wyrażenia regularne inaczej

ls /dev | grep ^hdd[0-9]$

Gdzie „^“, „$“ są znakami oznaczającymi, w wyrażeniach regularnych, początek i koniec wzorca. Można także odwrócić działanie każdego wzorca – wyszukać wszystkie nie pasujące wiersze używając do tego opcji „-v“ – odwróć.

Jeśli chcemy użyć większą ilość wzorców możemy je zapisać od nowej linii w pliku i podać jego nazwę wraz z opcją „-f“:

ls /dev | grep -f moje_wzorce.txt

lub

grep -f moje_wzorce.txt  przeszukiwany_plik.c
5
Twoja ocena: Brak Średnio: 5 (1 vote)