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

Polecenie find systemu Linux to potężne narzędzie, które umożliwia administratorom systemu lokalizowanie plików i katalogów oraz zarządzanie nimi w oparciu o szeroki zakres kryteriów wyszukiwania. Może znajdować katalogi i pliki według ich nazwy, typu lub rozszerzenia, rozmiaru, uprawnień itp.

Oprócz lokalizowania plików i katalogów, połączenie polecenia find z innymi umożliwia podjęcie działań na wynikach. Dodanie opcji -exec umożliwia administratorom systemu uruchamianie zewnętrznych poleceń i wykonywanie działań, takich jak kopiowanie, przenoszenie, usuwanie lub zmiana uprawnień do plików spełniających określone kryteria, takie jak rozmiar, nazwa itp.

W tym artykule zaczniemy od wyjaśnienia podstawowych poleceń wyszukiwania systemu Linux z przykładami. To pokaże ci, jak znaleźć pliki i katalogi. Następnie pokażemy, jak używać opcji -exec do działania na plikach lub katalogach w oparciu o ich rozmiar, uprawnienia itp.

Ogólna składnia polecenia find to

find {path} {name -of-file or dir-to-search} {action-to-take}

Gdzie,

  • ścieżka określa katalog.
  • nazwa-pliku lub katalog-do-przeszukiwania : Nazwa pliku lub katalogu do wyszukania
  • działania do podjęcia: takie jak kopiowanie, usuwanie, przenoszenie itp.

W tym samouczku wyjaśnimy, jak zlokalizować pliki i katalogi pasujące do określonych wzorców. Zobaczymy również, jak wykonywać działania na plikach lub katalogach, które lokalizuje polecenie find. Przewodnik jest oparty na Ubuntu, ale ma zastosowanie do większości dystrybucji i wersji Linuksa.

Spis treści:

Znajdź pliki i katalogi

Znajdź określone pliki według nazwy lub rozszerzenia

Aby wyszukać określony plik, uruchom następujące polecenie z katalogu głównego (/). Polecenie zawiera dokładną nazwę szukanego pliku.

find . -name file22.txt

Wyjście

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

Należy pamiętać, że wyniki obejmują ścieżkę. Jest to ważne, jeśli nie znasz katalogu, w którym znajduje się plik lub gdy znajduje się on w więcej niż jednym miejscu.

Możesz także wyszukać plik w innym katalogu, będąc nadal w bieżącej lokalizacji. W takim przypadku musisz podać ścieżkę do katalogu, w którym chcesz szukać.

find ./test -name file22.txt

Wyszukiwanie określonych plików w innym katalogu

W naszym przypadku będziemy szukać wszystkich zaczynających się od pliku z literami w katalogu test.

find ./test -name file*

Wyjście

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

Wyszukaj pliki według rozszerzenia

Aby znaleźć plik w systemie Linux z określonym rozszerzeniem, dodaj go do polecenia.

find . -name *.txt

Wyjście

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

Znajdź pliki i katalogi według nazwy

Użyj poniższego polecenia, aby wyszukać pliki i katalogi zaczynające się od liter qa. Na naszym komputerze mamy pliki qatree.txt i qa.txt oraz katalog o nazwie qa.

Jeśli uruchomimy polecenie;

find ./ -name "qa*"

Zwraca następujące dane wyjściowe

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

Polecenie zwraca zarówno pliki, jak i katalogi spełniające kryteria wyszukiwania. Aby znaleźć tylko pliki lub katalogi, musisz określić to w poleceniu.

Znajdź tylko pliki lub katalogi

Tylko w przypadku plików użyj przełącznika typu f.

Tylko pliki

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

Wyjście

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

Tylko katalogi

Dodaj opcję typu d, aby zlokalizować tylko katalogi.

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

Wyjście

./home/qa

Polecenie wyszukiwania bez uwzględniania wielkości liter

Wszystkie wyszukiwania z opcją -nazwa uwzględniają wielkość liter i nie dadzą wyników zawierających wielkie litery. Aby uzyskać wszystkie przypadki, użyj opcji -iname.

find ./ -iname "qa*"

Wyjście

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

Wyszukaj plik z wielu katalogów

Aby znaleźć pliki w różnych katalogach, dodaj ich ścieżki w poleceniu. W naszym przypadku sprawdzimy katalogi test i numeric.

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

Wyjście

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

Znajdź wiele plików z różnymi rozszerzeniami ze wszystkich katalogów

Możesz użyć polecenia find, aby zlokalizować wiele plików, które mają różne rozszerzenia, takie jak *.doc, *.txt *.pdf itp. Można to zrobić osobno, po jednym rozszerzeniu na raz lub za pomocą tylko jednego polecenia, które zawiera wszystkie żądane rozszerzenia.

odnaleźć . -type f ( -nazwa „*.txt” -o -nazwa „*.pdf” -o -nazwa „*.doc” )

wyjście

./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

Znajdź pliki zawierające określony tekst

Czasami chcesz uzyskać dostęp do pliku zawierającego określony tekst, ale nie możesz przypomnieć sobie jego nazwy lub lokalizacji. To polecenie pozwala znaleźć wszystkie pliki zawierające tekst docelowy.

Aby wyszukać wszystkie pliki zawierające słowo hiperkonwergencja”, użyj;

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

Wyjście

/root/numeric/hci
/root/HCIP

Opcja –i umożliwia poleceniu ignorowanie przypadków i znalezienie tekstu pisanego wielkimi literami lub bez, tj. hiperkonwergencja, hiperkonwergencja itp.

Aby wyszukać pliki w określonym katalogu, po prostu dodaj je do polecenia

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

Wyjście

./numeric/hci

Poznaj więcej przykładów poleceń grep.

Znajdź pliki i katalogi na podstawie rozmiaru

Możesz znaleźć wszystkie pliki lub katalogi, które są mniejsze, równe lub większe niż określony rozmiar, w określonym zakresie lub puste. Użyj odpowiedniego formatu rozmiaru w zależności od typu plików lub katalogów, których szukasz.

Opcje rozmiaru obejmują;

c – bajty

k – kilobajty

M – Megabajty

G – Gigabajty

Znajdź pliki o określonym rozmiarze – równym 30 MB

Aby wyszukać, znajdź wszystkie pliki 30 MB

find / -size 30M

Znajdź pliki większe niż określony rozmiar

find -size +2M

Wyjście

. /Downloads/ubuntu18043.iso 
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c

Znajdź pliki mniejsze niż 10 MB w bieżącym katalogu

find . -type f -size -10M

Znajdź pliki o rozmiarze od 100 do 200 MB

Podczas wyszukiwania plików w określonym zakresie, na przykład między 100 a 200 MB

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

Szukaj katalogów większych niż 20 KB

znajdź / -wpisz d -rozmiar +20k

Znajdź puste pliki i katalogi.

Akta

znajdź ./ -wpisz f -rozmiar 0

lub

find ./ -type f –empty

Katalogi

find ./ -type d –empty

Znajdź pliki według wieku lub czasu modyfikacji

Znajdź pliki starsze niż n dni

find /path/ -type f -name '*.txt' -mtime +8

Opcja -mtime +8 wyszuka pliki txt starsze niż 8 dni.

Według daty modyfikacji

Spowoduje to wyszukanie plików zmodyfikowanych w ciągu ostatnich 17 godzin

find . -mtime -17 -type f 

Wyszukuje katalogi zmodyfikowane w ciągu ostatnich 10 dni

find . -mtime -10 -type d 

Znajdź pliki na podstawie dostępu lub modyfikacji

Znajdź pliki na podstawie daty lub godziny dostępu. Pozwala to zobaczyć pliki, do których uzyskano lub nie uzyskano dostępu w określonym okresie.

Aby zobaczyć pliki, do których nie uzyskano dostępu w ciągu ostatnich 10 dni w katalogu domowym.

find /home -atime +10

Dostęp do plików dokładnie 10 dni temu

find /home -atime 10

Dostęp w ciągu ostatnich 10 dni

find /home -atime -10

Znajdź pliki zmodyfikowane w ciągu ostatnich n dni

Możesz także wyszukać pliki w katalogu /home zmodyfikowane w ciągu ostatnich 10 dni za pomocą polecenia;

find /home -mtime -10 

Znajdź pliki zmodyfikowane w określonym okresie.

Na przykład wszystkie pliki zmodyfikowane od 6 do 15 dni temu w katalogu domowym.

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

Pliki i katalogi, 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

Wyjście

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

Katalogi, do których uzyskano dostęp w ciągu ostatnich 10 minut

find . -amin -10 -type d

Znajdź pliki pasujące do określonych uprawnień

Składnia

$ find -perm mode

Gdzie tryb to zezwolenie, które jest albo numeryczne, takie jak 644, 655, 700, 777 itd., albo literowe, takie jak u=x, a=r+x itd.

Tryb można określić na trzy różne sposoby.

  • Bez prefiksu, gdy chcesz znaleźć pliki z dokładnie określonymi uprawnieniami.
  • Z „-” dla plików z co najmniej określonymi uprawnieniami. Spowoduje to zwrócenie plików z określonymi oraz dodatkowymi wyższymi uprawnieniami.
  • Użycie znaku „/” wymaga określenia właściciela lub grupy z uprawnieniami do pliku.
  • Znajdź pliki z pozwoleniem 777

    find -perm 777

    Wyjście

    ./file1

    Znajdź pliki z co najmniej 766
    znajdź -perm -766

    Wyjście

    ./file2
    ./file1

    Polecenie wyszukuje wszystkie pliki, w których

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

    W związku z tym zwraca dwa pliki spełniające to kryterium – plik1 i plik2. Pliki nie muszą mieć dokładnie 766 uprawnień i mogą mieć dodatkowe o ile są długie, ale muszą mieć co najmniej określone.

    Znajdź pliki do zapisu przez właściciela

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

    find -perm /222
    .
    ./file2
    ./file3
    ./file1

    Powyższe wyszukuje pliki, które mogą być zapisywane przez ich właściciela lub grupę.
    Zwraca to pliki, które mogą być zapisywane przez jedną z nich, ale niekoniecznie przez obie. Aby zobaczyć pliki, w przypadku których oba mają uprawnienia do zapisu, użyj przedrostka –.

    find -perm -220

    Wyjście

    ./file2
    ./file1

    Znajdź pliki należące do użytkownika

    Znajdź wszystkie pliki należące do Jacka

    find /home -user jack

    Wyjście

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

    Znajdź określone pliki należące do użytkownika

    Znajdź wszystkie pliki tekstowe należące do Jacka

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

    Wyjście

    /home/jack/docs/file32.txt

    Znajdź i wyświetl pliki i katalogi wraz z ich uprawnieniami

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

    Wyjście

    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

    Znajdź i działaj na podstawie wyników

    W tej sekcji przyjrzymy się, jak możesz działać na plikach, które pasują do wzorca określonego w poleceniu find.

    Znajdź pliki i zmień uprawnienia

    Znajdź i zmień uprawnienia niektórych typów plików. W naszym przypadku będziemy pracować z plikami PHP z różnymi uprawnieniami, jak pokazano poniżej.

    [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

    Poszukamy teraz wszystkich plików PHP (powyżej) i zamienimy ich uprawnienia na 755

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

    Polecenie szuka plików PHP w katalogu ver, a następnie ustawia ich uprawnienia na 755 (rwxr-xr-x)

    Wyniki

    [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

    Znajdź i zmień uprawnienia do plików i katalogów

    Znajdź pliki z 644 uprawnieniami i zmień je tak, aby miały 655 uprawnień

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

    Możesz także wyszukać katalogi z uprawnieniami 644 i zastąpić je 755.

    find . -type d -perm 644

    Wyjście

    ./docs   

    Folder dokumentów ma 644 uprawnienia

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

    Aby ustawić go na 755, uruchamiamy

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

    Teraz możemy sprawdzić ponownie, aby zobaczyć, co dokładnie 755

    find . -type d -perm 755

    Wyjście
    .
    ./dokumenty

    Z góry widzimy, że katalogi root i docs mają uprawnienia 755.

    Polecenie Ls –la podaje następujące szczegóły

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

    Znajdź i skopiuj pliki lub katalogi

    Znajdź i skopiuj określony plik do katalogu

    Poniższe polecenie znajdzie plik file22.txt i skopiuje go do katalogu ~/tmp/images.

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

    Znajdź i skopiuj jeden typ plików do katalogu

    Aby znaleźć pliki takie jak obrazy z rozszerzeniem jpg w bieżącym katalogu i skopiować je do innej lokalizacji, np. do folderu obrazów, użyj;

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

    Spowoduje to znalezienie i skopiowanie wszystkich plików jpg do folderu ~/tmp/images.

    Znajdź i skopiuj jeden plik do wielu katalogów

    Znajdź i skopiuj jeden do wielu katalogów.

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

    Spowoduje to znalezienie pliku hci i skopiowanie go do trzech katalogów /tmp/dir1/ /tmp/dir2/ i $HOME/3/

    Znajdź i przenieś pliki do innego katalogu

    Aby przenieść znany plik z katalogu do innego. Aby przenieść plik universal.php;

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

    Wyszukaj i przenieś pliki z określonym rozszerzeniem do innego folderu

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

    Znajdź określone pliki i przejdź do określonego innego folderu

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

    Polecenie szuka wszystkich plików, których nazwy zaczynają się od uni i mają dowolne rozszerzenie. Następnie przenosi je do katalogu /unifiles/

    Znajdź i przenieś pliki na podstawie wieku

    Znajdź i przenieś pliki starsze niż określone dni do innej lokalizacji, takiej jak archiwum.

    find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;

    Spowoduje to wyszukanie plików pdf starszych niż 20 dni i przeniesienie ich do katalogu backup1.

    Znajdź i usuń pliki i katalogi

    Składnia wyszukiwania i usuwania plików lub katalogów w bieżącym katalogu to

    odnaleźć . -type f -name „plik do usunięcia” -exec rm -f {} ; aby usunąć tylko pliki lub

    odnaleźć . -type d -name „katalog-do-usunięcia” -exec rm -rf {} ; usuwać tylko katalogi

    Znajdź i usuń tylko określone pliki

    Aby znaleźć i usunąć pliki zaczynające się od til, użyj;

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

    Aby znaleźć i usunąć katalogi zaczynające się od til

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

    Usuń zarówno pliki, jak i katalogi

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

    Spowoduje to usunięcie zarówno plików, jak i katalogów zaczynających się od liter til.

    Usuń według rozszerzenia

    Poniżej znajduje się sposób zlokalizowania i usunięcia wszystkich plików txt w bieżącym katalogu. Zamień txt na inne rozszerzenie, takie jak bak, pdf lub inne, które chcesz usunąć.

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

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

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

    Wyjście

    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 usunie katalogów i należy użyć opcji –r, aby zapewnić usuwanie rekurencyjne. Zapewnia to usunięcie pustych katalogów i zawierających pliki. Opcja -f wymusza usunięcie i jest używana zarówno dla plików, jak i katalogów.

    Znajdź i usuń pliki starsze niż n dni

    Znajdź i usuń pliki kopii zapasowej starsze niż 20 dni z bieżącego katalogu.

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

    Spowoduje to usunięcie wszystkich plików .bak starszych niż 20 dni.

    Znajdź i usuń tylko katalogi

    Aby usunąć katalog o nazwie dir22

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

    Upewnij się, że wielkość liter nazwy katalogu jest zgodna lub użyj opcji -iname.

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

    Usuwa zarówno Dir22, jak i dir22

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

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

    Wyjście
    rm: usunąć katalog „./Dir22”? n
    rm: usunąć katalog „./dir22”? y

    W naszym przypadku wpisaliśmy n dla katalogu Dir22, który nie zostanie usunięty, oraz y dla katalogu Dir22, który zostanie teraz usunięty.

    Znajdź i usuń puste pliki

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

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

    lub
    znajdź ./ -typ f -rozmiar 0 | xargs rm -f
    lub
    znajdź ./ -typ f -rozmiar 0 –usuń

    Znajdź i usuń puste katalogi

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

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

    Inną alternatywą jest użycie usuwania zamiast usuwania.

    find ./ -type d -empty -delete

    Należy pamiętać, że usunięcie plików systemowych lub krytycznych z komputera może spowodować uszkodzenie systemu operacyjnego lub aplikacji lub doprowadzić do utraty ważnych danych.

    Aby uniknąć przypadkowego usunięcia, najlepszą praktyką jest korzystanie z konta użytkownika innego niż root. Upewnij się również, że usuwasz właściwe pliki, które nie są przydatne, i że masz kopię zapasową wszystkich plików danych na wszelki wypadek.

    Co dalej?

    Śmiało i wypróbuj powyższe polecenia wyszukiwania systemu Linux w swoim laboratorium lub środowisku NIEPRODUKCYJNYM. Sprawdź, czy możesz użyć niektórych do zautomatyzowania czyszczenia systemu plików za pomocą Crontab. Aby opanować Linuksa, sprawdź to kurs online.