40 najlepszych przykładów polecenia Znajdź w systemie Linux

Photo of author

By maciekx

Spis treści:

Potężne polecenie find w systemie Linux

Polecenie `find` w systemie Linux jest niezwykle użytecznym narzędziem, które pozwala administratorom systemów na precyzyjne wyszukiwanie plików i katalogów oraz zarządzanie nimi. Daje możliwość odnajdywania elementów na podstawie rozmaitych kryteriów, takich jak nazwa, typ, rozszerzenie, rozmiar, uprawnienia i wiele innych.

Oprócz samego wyszukiwania, `find` w połączeniu z innymi poleceniami umożliwia wykonywanie akcji na znalezionych wynikach. Dzięki opcji `-exec` można uruchamiać zewnętrzne polecenia, co pozwala na automatyzację takich zadań, jak kopiowanie, przenoszenie, usuwanie lub modyfikowanie uprawnień plików spełniających określone warunki. Przykładowo, można wyszukać pliki o określonym rozmiarze i natychmiast je skopiować w inne miejsce.

W niniejszym artykule przedstawimy podstawowe zasady działania polecenia `find` na przykładach. Dowiesz się, jak wyszukiwać pliki i katalogi. Następnie zaprezentujemy, jak korzystać z opcji `-exec`, aby wykonywać operacje na plikach i katalogach na podstawie ich cech, jak rozmiar czy uprawnienia.

Ogólna forma polecenia `find` wygląda następująco:

find {ścieżka} {wzorzec-wyszukiwania} {akcja}

Gdzie:

  • `ścieżka` to katalog, w którym ma być prowadzone wyszukiwanie.
  • `wzorzec-wyszukiwania` to nazwa pliku lub katalogu, ewentualnie wzorzec (np. z użyciem `*`), który ma być odnaleziony.
  • `akcja` to działanie, które ma zostać wykonane na znalezionych elementach, np. kopiowanie, usuwanie, przenoszenie.

W tym przewodniku nauczymy się, jak lokalizować pliki i katalogi pasujące do określonych kryteriów. Pokażemy również, jak wykonywać działania na obiektach odnalezionych przez polecenie `find`. Ten przewodnik jest oparty na systemie Ubuntu, ale z powodzeniem można go stosować na większości dystrybucji i wersji systemu Linux.

Wyszukiwanie plików i katalogów

Wyszukiwanie plików według nazwy lub rozszerzenia

Aby znaleźć konkretny plik, uruchom poniższe polecenie z katalogu głównego (`/`). Polecenie zawiera dokładną nazwę poszukiwanego pliku.

find . -name file22.txt

Wynik:

./test/file22.txt
./sales/file22.txt

Zwróć uwagę, że wynik zawiera ścieżkę do pliku. Jest to bardzo przydatne, zwłaszcza gdy nie jesteśmy pewni, w jakim katalogu znajduje się poszukiwany plik, lub gdy występuje on w kilku miejscach.

Możesz także wyszukać plik w innym katalogu, nie zmieniając swojej bieżącej lokalizacji. W takim przypadku należy podać ścieżkę do katalogu, w którym chcesz przeprowadzić wyszukiwanie.

find ./test -name file22.txt

Wyszukiwanie plików o pasującej nazwie

W tym przykładzie będziemy szukać wszystkich plików, których nazwa zaczyna się od „file” w katalogu `test`.

find ./test -name file*

Wynik:

./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc

Wyszukiwanie plików według rozszerzenia

Aby wyszukać pliki z określonym rozszerzeniem, dodaj odpowiedni wzorzec do polecenia.

find . -name *.txt

Wynik:

./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt

Wyszukiwanie plików i katalogów według nazwy

Użyj poniższego polecenia, aby wyszukać pliki i katalogi, których nazwy zaczynają się od „qa”. W naszym systemie istnieją pliki `qatree.txt` i `qa.txt` oraz katalog o nazwie `qa`.

Po uruchomieniu polecenia:

find ./ -name "qa*"

Otrzymamy następujący wynik:

./test/qatree.pdf
./test/qa.txt
./home/qa

Polecenie zwraca zarówno pliki, jak i katalogi spełniające kryteria. Aby wyszukać tylko pliki lub tylko katalogi, należy to wyraźnie określić.

Wyszukiwanie tylko plików lub tylko katalogów

Aby wyszukać tylko pliki, użyj opcji `-type f`.

Wyszukiwanie tylko plików:

find ./ -type f -name "qa*"

Wynik:

./test/qatree.pdf
./test/qa.txt

Aby wyszukać tylko katalogi, użyj opcji `-type d`.

Wyszukiwanie tylko katalogów:

find ./ -type d -name "qa*"

Wynik:

./home/qa

Wyszukiwanie bez uwzględniania wielkości liter

Domyślne wyszukiwanie z opcją `-name` rozróżnia wielkość liter. Aby wyszukać elementy niezależnie od wielkości liter, użyj opcji `-iname`.

find ./ -iname "qa*"

Wynik:

./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa

Wyszukiwanie w wielu katalogach

Aby wyszukać w wielu katalogach jednocześnie, wystarczy podać ścieżki do nich w poleceniu. W tym przykładzie przeszukamy katalogi `test` i `numeric`.

find ./test ./numeric -name file22.txt -type f

Wynik:

./test/file22.txt
/root/numeric/file22.txt

Wyszukiwanie plików o różnych rozszerzeniach

Polecenie `find` umożliwia wyszukiwanie plików o różnych rozszerzeniach, takich jak `*.doc`, `*.txt`, `*.pdf` itd. Można to zrobić oddzielnie dla każdego rozszerzenia lub za pomocą jednego polecenia uwzględniającego wszystkie pożądane rozszerzenia.

Przykład:

find .  -type f ( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" )

Wynik:

./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./books/acro.pdf
./data1/FILE22.txt
./docs/files32.txt

Wyszukiwanie plików zawierających określony tekst

Czasami potrzebujemy znaleźć plik zawierający określony tekst, ale nie pamiętamy jego nazwy ani lokalizacji. Polecenie `find` w połączeniu z `grep` pozwala odnaleźć wszystkie pliki zawierające poszukiwaną frazę.

Przykład wyszukiwania wszystkich plików zawierających słowo „hiperkonwergencja”:

find / -type f -exec grep -l -i "hyperconvergence" {} ;

Wynik:

/root/numeric/hci
/root/HCIP

Opcja `-i` sprawia, że wyszukiwanie ignoruje wielkość liter, co pozwala na znalezienie tekstu pisanego zarówno dużymi, jak i małymi literami.

Aby wyszukać pliki w konkretnym katalogu, dodaj jego ścieżkę do polecenia:

find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;

Wynik:

./numeric/hci

Wyszukiwanie plików i katalogów na podstawie rozmiaru

Możemy wyszukiwać pliki i katalogi mniejsze, równe lub większe od określonego rozmiaru, mieszczące się w danym przedziale lub puste. W zależności od typu plików i katalogów, których szukamy, stosujemy odpowiedni format rozmiaru.

Dostępne opcje rozmiaru to:

c – bajty

k – kilobajty

M – megabajty

G – gigabajty

Wyszukiwanie plików o określonym rozmiarze (np. 30 MB)

Aby znaleźć wszystkie pliki o rozmiarze 30 MB, użyjemy polecenia:

find / -size 30M

Wyszukiwanie plików większych niż określony rozmiar

Aby znaleźć pliki większe niż 2 MB:

find -size +2M

Wynik:

./Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f4143050577a9c

Wyszukiwanie plików mniejszych niż 10 MB

Aby znaleźć pliki mniejsze niż 10 MB w bieżącym katalogu:

find . -type f -size -10M

Wyszukiwanie plików o rozmiarze z przedziału od 100 do 200 MB

Aby znaleźć pliki, których rozmiar mieści się między 100 a 200 MB:

find / -size +100M -size -200M

Wyszukiwanie katalogów większych niż 20 KB

find / -type d -size +20k

Wyszukiwanie pustych plików i katalogów

Puste pliki:

find ./ -type f -size 0

Lub:

find ./ -type f -empty

Puste katalogi:

find ./ -type d -empty

Wyszukiwanie plików według wieku lub czasu modyfikacji

Wyszukiwanie plików starszych niż N dni:

find /ścieżka/ -type f -name '*.txt' -mtime +8

Powyższe polecenie wyszuka pliki z rozszerzeniem `txt` starsze niż 8 dni.

Wyszukiwanie plików według daty modyfikacji

Poniższe polecenie wyszuka pliki zmodyfikowane w ciągu ostatnich 17 godzin:

find . -mtime -17 -type f 

Poniższe polecenie wyszuka katalogi zmodyfikowane w ciągu ostatnich 10 dni:

find . -mtime -10 -type d 

Wyszukiwanie plików na podstawie czasu dostępu lub modyfikacji

Możemy wyszukiwać pliki na podstawie daty i godziny ostatniego dostępu. Pozwala to na sprawdzenie, które pliki były używane w danym okresie.

Aby wyświetlić pliki, do których nie uzyskano dostępu w ciągu ostatnich 10 dni w katalogu domowym:

find /home -atime +10

Aby wyświetlić pliki, do których uzyskano dostęp dokładnie 10 dni temu:

find /home -atime 10

Aby wyświetlić pliki, do których uzyskano dostęp w ciągu ostatnich 10 dni:

find /home -atime -10

Wyszukiwanie plików zmodyfikowanych w ciągu ostatnich N dni

Możemy wyszukać pliki zmodyfikowane w ciągu ostatnich 10 dni w katalogu `/home`:

find /home -mtime -10

Wyszukiwanie plików zmodyfikowanych w określonym przedziale czasowym

Przykład: wyszukiwanie wszystkich plików zmodyfikowanych od 6 do 15 dni temu w katalogu domowym:

find /home -type f -mtime +6 -mtime -15

Wyszukiwanie plików i katalogów, do których uzyskano dostęp w ciągu ostatnich 10 minut

Aby znaleźć pliki, do których uzyskano dostęp w ciągu ostatnich 10 minut, użyj opcji `-amin`.

find . -amin -10 -type f

Wynik:

./.bash_history
./[email protected]:~#

Aby wyszukać katalogi, do których uzyskano dostęp w ciągu ostatnich 10 minut:

find . -amin -10 -type d

Wyszukiwanie plików pasujących do określonych uprawnień

Składnia polecenia:

find -perm mode

gdzie `mode` to uprawnienie, które może być określone w postaci numerycznej (np. 644, 655, 700, 777) lub literowej (np. u=x, a=r+x).

Uprawnienia można określić na trzy sposoby:

  • Bez prefiksu – wyszukiwanie plików z dokładnie określonymi uprawnieniami.
  • Z „-” – wyszukiwanie plików z co najmniej określonymi uprawnieniami (mogą mieć dodatkowe uprawnienia).
  • Z „/” – określenie, że właściciel lub grupa ma uprawnienia do pliku.

Wyszukiwanie plików z uprawnieniami 777

find -perm 777

Wynik:

./file1

Wyszukiwanie plików z uprawnieniami co najmniej 766

find -perm -766

Wynik:

./file2
./file1

Polecenie wyszuka pliki, w których:

  • Właściciel pliku ma uprawnienia do odczytu/zapisu/wykonania.
  • Grupa ma uprawnienia do odczytu/zapisu.
  • Inni mają uprawnienia do odczytu/zapisu.

Zostaną zwrócone pliki spełniające te kryteria, w tym pliki o wyższych uprawnieniach.

Wyszukiwanie plików, które mogą być zapisywane przez właściciela

Użyjemy „/” aby wyszukać pliki, które mogą być zapisywane przez właściciela, grupę lub innych użytkowników.

find -perm /222

Wynik:

.
./file2
./file3
./file1

Powyższe polecenie wyszuka pliki, które mogą być zapisywane przez ich właściciela lub grupę. Zostaną zwrócone pliki, które mogą być zapisywane przez jedną z tych grup, ale niekoniecznie obie. Aby zobaczyć pliki, gdzie obie grupy mają uprawnienia do zapisu, użyj przedrostka „-„.

find -perm -220

Wynik:

./file2
./file1

Wyszukiwanie plików należących do użytkownika

Wyszukiwanie wszystkich plików należących do użytkownika `jack`:

find /home -user jack

Wynik:

/home/jack
/home/jack/examples.desktop
/home/jack/.gnupg
/home/jack/.gnupg/private-keys-v1.d
/home/jack/ans.cgi

Wyszukiwanie określonych plików należących do użytkownika

Wyszukiwanie wszystkich plików tekstowych należących do użytkownika `jack`:

find /home -user jack -iname "*.txt"

Wynik:

/home/jack/docs/file32.txt

Wyświetlanie plików i katalogów wraz z ich uprawnieniami

find -name "*.conf" | ls -l

Wynik:

total 120
drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2
drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop
drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents
drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads
-rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23
-rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt

Wyszukiwanie i wykonywanie akcji na wynikach

W tej sekcji omówimy, jak wykonywać akcje na plikach, które pasują do wzorca określonego w poleceniu `find`.

Wyszukiwanie plików i zmiana ich uprawnień

Możemy wyszukiwać pliki danego typu i zmieniać ich uprawnienia. W tym przykładzie będziemy pracować z plikami PHP o różnych uprawnieniach:

[email protected]:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php

Teraz wyszukamy wszystkie pliki PHP i zmienimy ich uprawnienia na 755.

find ver -name "*.php" -type f -exec chmod 755 {} ;

Powyższe polecenie wyszuka pliki PHP w katalogu `ver` i ustawi ich uprawnienia na 755 (`rwxr-xr-x`).

Wynik:

[email protected]:~/ver$ ls -la
total 8
drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 .
drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 ..
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php
-rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php

Wyszukiwanie i zmiana uprawnień plików i katalogów

Aby znaleźć pliki z uprawnieniami 644 i zmienić je na 655:

find . -type f -perm 644 -exec chmod 655 {} ;

Możemy też wyszukać katalogi z uprawnieniami 644 i zmienić je na 755.

find . -type d -perm 644

Wynik:

./docs

Katalog `docs` ma uprawnienia 644.

drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs

Aby zmienić jego uprawnienia na 755:

find . -type d -perm 644 -exec chmod 755 {} ;

Możemy ponownie sprawdzić uprawnienia:

find . -type d -perm 755

Wynik:

.
./docs

Widzimy, że katalogi root i `docs` mają uprawnienia 755. Pełne szczegóły polecenia `ls -la`:

drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs

Wyszukiwanie i kopiowanie plików lub katalogów

Aby znaleźć i skopiować konkretny plik do innego katalogu, np. do katalogu `~/tmp/images`:

find -iname file22.txt -exec cp {} ~/tmp/images ;

Aby wyszukać i skopiować wszystkie pliki danego typu (np. obrazy z rozszerzeniem `jpg`) do innego katalogu:

find -iname '*.jpg' -exec cp {} ~/tmp/images ;

Powyższe polecenie skopiuje wszystkie pliki `jpg` do folderu `~/tmp/images`.

Wyszukiwanie i kopiowanie jednego pliku do wielu katalogów

Aby znaleźć i skopiować plik do wielu katalogów:

find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;

Powyższe polecenie znajdzie plik `hci` i skopiuje go do katalogów `/tmp/dir1/`, `/tmp/dir2/` i `$HOME/3/`.

Wyszukiwanie i przenoszenie plików do innego katalogu

Aby przenieść plik z jednego katalogu do innego, np. aby przenieść plik `universal.php`:

find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;

Aby wyszukać i przenieść wszystkie pliki z danym rozszerzeniem do innego folderu:

find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;

Wyszukiwanie określonych plików i przenoszenie ich do innego folderu

find -type f -name uni*.* -exec mv {} ~/unifiles/ ;

Powyższe polecenie wyszuka pliki, których nazwa zaczyna się od `uni` i ma dowolne rozszerzenie, a następnie przeniesie je do katalogu `/unifiles/`.

Wyszukiwanie i przenoszenie plików na podstawie wieku

Aby przenieść pliki starsze niż określona liczba dni do innej lokalizacji, na przykład do archiwum:

find /ścieżka/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

Powyższe polecenie wyszuka pliki `pdf` starsze niż 20 dni i przeniesie je do katalogu `backup1`.

Wyszukiwanie i usuwanie plików i katalogów

Składnia polecenia `find` służąca do usuwania plików i katalogów w bieżącym katalogu:

Usuwanie tylko plików:

find .  -type f -name "plik-do-usunięcia" -exec rm -f {} ;

Usuwanie tylko katalogów:

find .  -type d -name "katalog-do-usunięcia" -exec rm -rf {} ;

Wyszukiwanie i usuwanie tylko określonych plików

Aby znaleźć i usunąć pliki, których nazwa zaczyna się od `til`:

find . -type f -name "til*" -exec rm {} ;

Aby znaleźć i usunąć katalogi, których nazwa zaczyna się od `til`:

find . -type d -name "til*" -exec rm {} ;

Usuwanie plików i katalogów o tej samej nazwie

find . -name "til*" -exec rm -rf {} ;

Powyższe polecenie usunie zarówno pliki, jak i katalogi, których nazwa zaczyna się od liter `til`.

Usuwanie plików według rozszerzenia

Poniżej przedstawiono sposób wyszukiwania i usuwania wszystkich plików tekstowych w bieżącym katalogu. Zastąp `txt` innym rozszerzeniem (np. `bak`, `pdf`), aby usunąć pliki innego typu.

find . -type f -name "*.txt" -exec rm -f {} ;

Jeśli chcesz, aby system przed usunięciem każdego pliku wyświetlał monit o potwierdzenie, dodaj opcję `-i`:

find . -type f -name "*.txt" -exec rm -i {} ;

Wynik:

rm: remove regular empty file './File22.txt'? y
rm: remove regular empty file './file22.txt'? y
rm: remove regular empty file './file23.txt'?

Domyślnie opcja `-rm` nie usuwa katalogów. Należy użyć opcji `-r`, aby zapewnić rekurencyjne usuwanie (usuwanie katalogów i plików w nich zawartych). Opcja `-f` wymusza usunięcie i jest używana zarówno dla plików, jak i katalogów.

Wyszukiwanie i usuwanie plików starszych niż N dni

Aby wyszukać i usunąć pliki kopii zapasowej starsze niż 20 dni z bieżącego katalogu:

find . -type f -name '*.bak' -mtime +20 -exec rm {} ;

Powyższe polecenie usunie wszystkie pliki `bak` starsze niż 20 dni.

Wyszukiwanie i usuwanie tylko katalogów

Aby usunąć katalog o nazwie `dir22`:

find . -type d -name dir22 -exec rm -rf {} ;

Upewnij się, że nazwa katalogu ma właściwą wielkość liter lub użyj opcji `-iname`.

find . -type d -iname Dir22 -exec rm -rf {} ;

Powyższe polecenie usunie zarówno `Dir22`, jak i `dir22`.

Aby potwierdzić przed usunięciem, użyj opcji `-i`:

find . -type d -iname Dir22 -exec rm -rf -i {} ;

Wynik:

rm: remove directory "./Dir22"? n
rm: remove directory "./dir22"? y

W tym przypadku wpisaliśmy `n` dla katalogu `Dir22` (który nie zostanie usunięty) oraz `y` dla katalogu `dir22` (który zostanie usunięty).

Wyszukiwanie i usuwanie pustych plików

Można użyć dowolnego z poniższych poleceń, aby zlokalizować puste pliki i usunąć je automatycznie:

find ./ -type f -size 0 -exec rm -f {} ;

lub

find ./ -type f -size 0 | xargs rm -f

lub

find ./ -type f -size 0 -delete

Wyszukiwanie i usuwanie pustych katalogów

Aby usunąć puste katalogi, użyjemy opcji `d`:

find ./ -type d -empty -exec rmdir {} ;

Alternatywą jest użycie opcji `-delete` zamiast `-exec rmdir`:

find ./ -type d -empty -delete

Pamiętaj, że usuwanie plików systemowych lub innych ważnych elementów może uszkodzić system operacyjny lub aplikacje, a także prowadzić do utraty ważnych danych.

Aby uniknąć przypadkowego usunięcia niepotrzebnych elementów, korzystaj z konta użytkownika innego niż `root`. Upewnij się, że usuwasz tylko te pliki, które są niepotrzebne i masz kopię zapasową wszystkich ważnych danych.

Co dalej?

Zachęcamy do przetestowania powyższych poleceń `find` w środowisku testowym. Zobacz, czy uda Ci się wykorzystać niektóre z nich do zautomatyzowania procesu czyszczenia systemu plików za pomocą narzędzia `Crontab`. Jeśli chcesz zgłębić wiedzę na temat systemu Linux, sprawdź ten kurs online.


newsblog.pl