Licencja Creative Commons

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


Licencja Creative Commons