Autorem poniższego opracowania jest dr Piotr A. Dybczyński z Instytutu Obserwatorium Astronomiczne UAM w Poznaniu.
1. find
find - szuka plików w hierarchii katalogowej
SKŁADNIA
find [ścieżka...] [wyrażenie]
OPCJE
-maxdepth n zagłębiaj się na 'n' poziomów w strukturę katalogów
TESTY
Wartości numeryczne mogą być podawane jako
+n dla większych niż n,
-n dla mniejszych niż n,
n dla równych n.
-amin n
Dostęp do pliku nastąpił ostatnio n minut temu.
-anewer plik
Do pliku ostatnio dostano się wcześniej niż plik został zmodyfikowany.
-atime n
Do pliku dostano się po raz ostatni n*24 godzin temu.
-cmin n
Status pliku został zmieniony n minut temu.
-cnewer plik
Status pliku był ostatnio zmieniony wcześniej niż zmodyfikowano plik. -cnewer podlega -follow tylko
jeśli -follow pojawia się w linii komend przed -cnewer.
-ctime n
Status pliku zmienił się ostatnio n*24 godzin temu.
-empty Plik jest pusty i jest albo plikiem regularnym, albo katalogiem.
-gid n Numeryczny GID pliku to n.
-group nazwag
Plik należy do grupy nazwag (numeryczny GID jest dopuszczalny).
-mmin n
Dane pliku były ostatnio modyfikowane n minut temu.
-mtime n
Dane pliku były ostatnio modyfikowane n*24 godzin temu.
-name wzorzec
Podstawa nazwy pliku (z usuniętą ścieżką i poprzedzającymi katalogami) odpowiada wzorcowi powłoki
wzorzec. Metaznaki (`*', `?', `[]') nie odpowiadają `.' na początku nazwy pliku. Aby zignorować kata‐
logi i pliki im podległe, użyj -prune; zobacz przykład w opisie -path.
-newer plik
Plik został zmodyfikowany wcześniej niż plik. -newer podlega -follow tylko jeśli -follow znajduje się
w linii komend przed -newer.
-nouser
Do numerycznego UID pliku nie pasuje żaden użytkownik.
-nogroup
Do numerycznego GID pliku nie pasuje żadna grupa.
-perm prawa
Bity praw pliku są dokładnie równe prawom (ósemkowym lub symbolicznym). Prawa symboliczne używają 0
jako punktu wyjścia.
-size n[bckw]
Plik zajmuje n jednostek miejsca. Jednostki to domyślnie 512-bajtowe bloki.
Jeśli doklejona jest litera `c', jest to n bajtów, jeśli `k', kilobajtów, jeśli `w', dwubajtowych słów.
-type c
Plik jest typu c:
b blokowy (buforowany) plik specjalny
c znakowy (niebuforowany) plik specjalny
d katalog
p łącze nazwane (FIFO)
f zwykły plik
l dowiązanie symboliczne
s gniazdo
-uid n Numeryczny UID pliku to n.
-used n
Do pliku ostatnio dostano się n dni po zmianie jego statusu.
-user unazwa
Właścicielem pliku jest użytkownik unazwa (numeryczny UID jest tu dozwolony).
Przykłady
- find -name '*t' - znajdź w katalogu bieżącym i jego podkatalogach pliki o nazwach (czyli np. rozszerzeniach) kończących się lietrą 't'
- find $HOME -maxdepth 1 -type f -size +300c -size -100k - wypisz pliki (nie katalogi) z katalogu domowego (ale nie z jego podkatalogów) o rozmiarach pomiędzy 300 bajtów a 100 kilobajtów
- find ~/ -type f -mtime +2 - znajdź w katalogu domowym pliki modyfikowane więcej niż dwa dni temu.
- find /etc -maxdepth 1 -type f -perm 600 - znajdź w katalogu /etc (ale nie w jego podkatalogach) pliki, które czytać i modyfikować może tylko ich właściciel.
2. grep
Składnia: grep [OPCJA]... WZORZEC [PLIK] ...
Szukanie WZORCA w każdym PLIKU lub na standardowym wejściu WZORZEC domyślnie jest podstawowym wyrażeniem regularnym (BRE). Przykład: grep -i 'hello world' menu.h main.c
Wybór i interpretacja wyrażeń regularnych:
-f, --file=PLIK użycie wzorców z PLIKU -i, --ignore-case zignorowanie rożnic między małymi i wlk. lit. -w, --word-regexp dopasowanie WZORCA tylko do pełnych słów -x, --line-regexp dopasowanie WZORCA tylko do całych linii
Różne:
-v, --invert-match wybierz linie nie pasujące
Sterowanie danymi wyjściowymi:
-n, --line-number wypisanie numerów linii w wyniku
-d, --directories=DZIAŁANIE jak się obchodzić z katalogami,
DZIAŁANIE to `read' (czytanie), `recurse'
(przeglądanie rekurencujne) albo 'skip'
(pominięcie).
-R, -r, --recursive równoważne --directories=recurse .
--include=WZORZEC przeszukiwane będą pliki pasujące do WZORCA
--exclude=WZORZEC pliki pasujące do WZORCA będą pominięte
--exclude-from=PLIK pominięcie plików pasujących do WZORCÓW w PLIKU
--exclude-dir=WZORZEC katalogi pasujące do WZORCA będą pominięte
-L, --files-without-match wypisanie tylko nazw PLIKÓW bez trafień
-l, --files-with-matches wypisanie tylko nazw PLIKÓW z trafieniami
-c, --count wypisanie tylko liczby pasujących linii w PLIKACH
Wyrażenia regularne (wybór)
Z, k, 2, ? (pojedyncze znaki)
[xyz] – jeden znak z podanego zbioru znaków
[a-z] – jeden znak z podanego zakresu znaków (tu: dowolna mała litera)
[^0-9] – symbol ^ oznacza dopełnienie podanego zbioru znaków (tu dowolny znak byle nie cyfra).
[^a-zA-Z] – dowolny znak nie będący literą
. (kropka) – jeden dowolny znak np. 1, z, +
^ na początku wyrażenia regularnego – oznacza początek wiersza, np. ^N – wiersz zaczynający się na literę N
$ na końcu wyrażenia regularnego – oznacza koniec wiersza, np. dziwaczka$ – wiersz kończący się słowem 'dziwaczka'
* – operator powtórzenia (dowolną liczbę razy, w tym zero razy) wyrażenia znajdującego się po lewej stronie,
\{m,n\} – operator powtórzenia (co najmniej m razy i co najwyżej n razy) wyrażenia znajdującego się po lewej stronie
Przykłady:
- grep p kaczka.txt - wypisz wiersze pliku kaczka.txt zawierające literę 'p'
- grep -v kaczka kaczka.txt - wypisz wiersze pliku kaczka.txt nie zawierające ciągu liter 'kaczka'
- grep -c zamiast kaczka.txt - podaj w ilu wierszach pliku kaczka.txt występuje ciąg 'zamiast'
- grep -i ^N kaczka.txt - wypisz wiersze zaczynające się na literę 'N' lub 'n'
- grep -w t[oa] kaczka.txt - wypisz wiersze zawierające słowa 'to' lub 'ta', ale nie dłuższe słowa zawierające te pary liter.
Zadanie
- znajdź na pracowni plik hsjkef.txt
- skopiuj do swojego katalogu
- napisz skrypt, który kolejno:
- usuwa z niego wszystkie linie zawierające cyfry
- sortuje według trzeciego znaku w wierszu
- wypisuje wynik na ekranie

