Polecenie find

Linux

Ikona folderu z lupą – wyszukiwanie plików

Znak . określa bieżący katalog a znak .. katalog nadrzędny. Argument -print wyświetla plik i foldery z użyciem separatora \n. -print0 używa separatora \0.

find . -print

-iname ignoruje wielkość liter

find . -iname "plik*" -print

Operator -a i -and pozwala wykonać logiczną operację AND, natomiast opcje -o i -or umożliwiają wykonanie logicznej operacji OR

find . \( -name "*.txt" -o -name "*.pdf" \) -print

Polecenie wykorzystuje operator -and do znalezienia tylko plików rozpoczynających się na literę s, w którym występuje także e

find . \( -name "*e*" -and -name "s* \)

Wyrażenia regularne

find . -regex '.*\.(\py\|sh\)$'

Ograniczenie poziomu zagnieżdżenia -maxdepth i -mindepth

Wyświetlenie wszystkich plików, których nazwa rozpoczyna się od litery p i które w odniesieniu do bieżącego katalogu są położone co najmniej dwa podkatalogi niżej, użyj:

find . -mindepth 2 - name "p*" -print

Wyświetl listę wyłącznie katalogów z uwzględnieniem katalogów podrzędnych

find . -type d -print

Wyświetla listę plików

find . -type f -print

Wyświetla listę dowiązań symbolicznych

find . -type l -print

Typy plików Argument

Zwykły plik f

Dowiązanie symboliczne l

Katalog d

Specjalne urządzenie znakowe c

Urządzenie blokowe b

Gniazdo s

Kolejka FIFO p

Wyszukiwanie oparte na czasie powiązanym z plikami

Czas dostępu – ostatni znacznik czasu, który określa, kiedy plik został użyty przez danego użytkownika

-atime

Czas modyfikacji – ostatni znacznika czasu, który określa, kiedy plik został zmodyfikowany

-mtime

Czas zmiany – ostatni znacznik czasu, który określa, kiedy zostały zmodyfikowane metadane pliku np. uprawnienia lub prawo właściciela

-ctime

Opcje te mogą być określone z wartoścami całkowitymi identyfikuącymi liczbę dni. Tym wartościom często towarzyszą znaki – lub +. Znak – minus oznacza mniejsze niż, natomiast znak + większe niż

Wyświetl wszystkie pliki, do których dostęp został uzyskany w ciągu ostatnich 7 dni

find . -type f -atime -7 -print

Wyświetl wszystkie pliki, do których dostęp został uzyskany dokładnie 7 dni temu

find . -type f -atime 7 -print

Wyświetl wszystkie pliko do których dostęp został uzyskany ponad 7 dni temu

find .-type f -atime +7 -print

Parametry oparte na czasie, które mierzone są w minutach

Czas dostępu

-admin

Czas modyfikacji

-mmin

Czas zmiany

-cmin

Wyświetlenie wszystkich plików, do których dostęp uzyskano wcześniej niż 7 min temu

find . -type f -min +7 -print

Określenie pliku referencyjnego na potrzeby porównania z wykorzystaniem znacznika czasu.

-newer

Aby na przykład znaleźć wszystkie pliki z czasem modyfikacji późniejszym niż czas modyfikacji danego pliku plik.txt wykonaj

find . -type f -newer plik.txt -print

Wyszukiwanie oparte na wielkości plików

find . -type f -size +2k  // pliki przekraczające 2kb
find . -type f -size -2k // pliki mniejsze niż 2kb
find . -type f -size 2k // plik o wielkości 2kb

Jednostki wielkości:

b – bloki 512bajtowe,

c – bajty,

w – dwa słowa bajtowe,

k – kilobajty 1024,

M – megabajty 1024 kilobajty,

G – gigabajty 1024 megabajty.

Dopasowanie na podstawie uprawnień plików i ich praw właściciela

Wyświetlanie plików z uprawnieniami 644

find . -type f -perm 644 -print

Wyświetlanie plików, które nie mają właściwych uprawnień

find . -type f - name "*.php" ! -perm 644 - print

Szukanie plików użytkownika tomasz z parametrem -user

find . -type f -user tomasz -print

Usuwanie plików *.txt w bieżącym katalogu

find . -type f -name  "*.txt" -delete

Wykonywanie poleceń -exec

Za pomocą opcji -exec polecenie find może być połączene z wieloma innymi poleceniami

Polecenie find wykorzystuje parę nawiasów klamrowych {} jako reprezentację nazwy plików. W poniższym przykładzie dla każdego dopasowanego pliku ciąg {} zostanie zastąpiony nazwą plików. Następnie zostanie zmieniony właściciel pliku.

find . -type f -user root -exec chown tomasz {} \;
uwaga
uwaga

Uwaga! Polecenie jest zakończone w postaci sekwencji ucieczki. w przeciwnym razie zostanie potraktowany przez powłokę jako koniec polecenie find zamiast jako koniec polecenie chwon

Jeśli polecenie przyjmuje wiele argumentów, to zamiast średnikiem można je zakończyć znakiem +. Znak plus umożliwia poleceniu find tworzenie listy wszystkich plików, które pasują do parametrów wyszukiwania, i uruchomienia aplikacji z wszystkimi plikami w jednym poleceniu.

Poniższe działanie można wykonać za pomocą każdego z działań:

find . -type f -name "*.c" -exec cat {} \;>all_c_files.txt
find . -type f -name "*.c" -exec cat {} > all_c_files.txt \;
find . -type f -name "*.c" -exec cat {} > all_c_files.txt \;

Kopiowanie wszystkich plików txt istniejących 10 dni do katalogu OLD

find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
uwaga
uwaga

Uwaga! Parametr -exec nie może użyć wielu poleceń, ale można dodać skrypt
-exec ./commans.sh {} \;

Pomijanie określonych podkatalogów przez polecenie find

Wykluczenie plików pasujących do wzorca -prune

find . -name '.git' -prune -o -type f -print

W celu przyspieszenia operacji najpierw wyklucz potem szukaj.

find . -type f -exec bash -c 'echo "This file found" >>"$1"' _ {} \;