Wprowadzenie do Linuxa

9 Wyszukiwanie plików

which

wyszukuje położenie programu w katalogach ze zmiennej $PATH
Postać: which polecenie
Przykład:
$ which find
/usr/bin/find

whereis

wyszukuje (wszystkie) położenia plików binarnych, źródłowych i stron podręcznika danego polecenia
Postać: whereis polecenie…
Przykład:
$ whereis find
find: /usr/bin/find /usr/man/man1/find.1.gz

find

szuka plików w drzewie katalogów
Postać: find [katalog] [wyrażenie]
Argumentem polecenia jest katalog w którym chcemy odnaleźć plik określony za pomocą wyrażenia.
Najważniejszymi opcjami stosowanymi w wyrażeniu są:
-name nazwa_pliku znajdź plik o podanej nazwie. Możliwe jest użycie znaków specjalnych powłoki do określenia psującej nazwy: * zastępuje dowolny ciąg znaków, ? zastępuje pojedynczy znak, [] zastępuje pojedynczy znak z listy podanej w nawiasach
-iname nazwa_pliku znajdź plik o podanej nazwie (nie rozróżnia wielkości liter)
-group nazwa_grupy plik należy do danej grupy
-user nazwa_użytkownika właścicielem pliku jest użytkownik
-type [f|d|l|b] typ pliku: f - zwykły plik, d- katalog, l - link, b - plik blokowy
-atime [+|-]liczba plik był otwierany (acces time) określoną liczbę dni temu (np. -atime -3 oznacza wartość mniejszą niż 3 dni)
-mtime [+|-]liczba plik był modyfikowany określoną liczbę dni temu
-size [+|-]liczba[c|k|M|G] plik o określonym rozmiarze (c - bajty, k - kilobajty, M - megabajty, G - gigabajty
Znak + lub - przed liczba oznacza poszukiwanie odpowiednio większej lub mniejszej wartości. Przykładowo -size +10M oznacza pliki o rozmiarze większym niż 10MB.
Przykład:
$ find dane -name plik.txt
szuka pliku plik.txt w katalogu dane
$ find / -name ’*.jpg’ -user kazik
znajdzie pliki w twoim domowym katalogu które posiadają rozszerzenie jpg i ich właścicielem jest użytkownik kazik
$ find . -mtime -2
znajdzie pliki w bieżącym katalogu, które były modyfikowane w ciągu ostatnich dwóch dni
$ find /usr -iname ’[a-d]*’ -user root -type f -size -2M
wyszuka w katalogu /usr pliki o nazwie zaczynającej się od liter a, b, c lub d, których właścicielem jest root i które maja rozmiar nie większy od 2 megabajtów

Wszystkie wyrażenia zawarte w poleceniu find muszą być spełnione aby nazwa pasującego pliku została wyświetlona. Odpowiada to wykonaniu operacji logicznej AND na tych wyrażeniach. Użycie opcji -o pozwala wykonać operację logiczną OR zaś opcja -not pozwala zanegować stojące za nią wyrażenie. Przykładowo:
$ find . -name ’*.mp3’ -o -size +10M
wypisze nazwy plików z bieżącego katalogu, które posiadają rozszerzenie mp3 lub posiadają rozmiar większy niż 10MB.
$ find . -not -name ’*.mp3’
wypisze nazwy plików z bieżącego katalogu, które nie posiadają rozszerzenie mp3

W momencie znalezienia pliku spełniającego wyrażenie program find wykonuje akcję -print, czyli wyświetlenie lokalizacji pliku.
Za pomocą opcji -exec możemy wykonać dowolne polecenie w momencie znalezinia pliku. Takie polecenie musi być zakończone znakami \;
$ find . -name ’*.txt’ -exec echo znalazłem \;
wyświetli komunikat znalazłem dla każdego znalezionego pliku
Nazwa znalezionego pliku dostępna jest za pomocą wyrażenia {}, dzięki czemu możliwe jest wykoananie dowolnego polecenia, którego argmentem ma być znaleziony plik, np.:
$ find . -name ’*.txt’ -exec rm -f ’{}’ \;
spowoduje usuniecie znalezionych plików za pomocą polecenia rm -f. Podobny efekt mozna uzyskać przesyłając w potoku listę znalezionych plików do polecenia xargs. $ find pliki -name ’*.txt’ | xargs du -sk
wykona komendę du -sk (wyświetli rozmiar w kilobajtach) dla każdego pliku znalezionego przez polecenie find.

Dużo więcej na temat polecenia find można znaleźć w dokumentacji man

locate

wyszukiwanie plików o podanej nazwie
Postać: locate [opcje]... wyrażenie...

Polecenie przeszukuje bazę danych w poszukiwaniu pliku, którego nazwa (lub ścieżka) zawiera podany wzorzec (wyrażenie regularne). Należy jednak pamiętać, że w zależności od tego jak dawno temu przeprowadzane było indeksowanie plików, lista plików może być nieaktualna i może zawierać wpisy o plikach, które już zostały usunięte lub może nie ujwniać plików, które zostały utworzone przed uaktualnieniem bazy danych. Nie wszystkie katalogi dostepne w systemie podlegają też indeksowaniu. Zazwyczaj baza jest aktualizowana raz dziennie z pomocą narzędzia cron.

Przykład:
$ locate stdlib
odnajdzie wszyskie ściezki plików zawierające słowo stdlib.