40 nejlepších příkladů příkazu Najít v Linuxu

Photo of author

By etechblogcz

Obsah

Příkaz find v Linuxu představuje robustní nástroj, který umožňuje systémovým administrátorům efektivně vyhledávat a spravovat soubory a složky na základě komplexních kritérií. Můžete s ním vyhledávat soubory a adresáře podle jejich názvu, typu, přípony, velikosti, přístupových práv a mnoha dalších atributů.

Kromě pouhého vyhledávání umožňuje find v kombinaci s dalšími nástroji provádět akce na základě získaných výsledků. S volbou -exec mohou administrátoři spouštět externí příkazy a provádět operace, jako je kopírování, přesun, mazání či změna přístupových práv u souborů a složek, které odpovídají definovaným kritériím, jako je například velikost či název.

V tomto článku si nejprve vysvětlíme základy příkazu find s ilustrativními příklady. Ukážeme si, jak nalézt soubory a složky. Následně si předvedeme, jak s pomocí volby -exec provádět specifické operace se soubory a složkami na základě jejich charakteristik, jako jsou velikost nebo přístupová práva.

Obecná syntaxe příkazu find vypadá následovně:

find {cesta} {název-souboru-nebo-složky-k-vyhledání} {akce-ke-provedení}

Kde:

  • cesta definuje adresář, ve kterém se má hledat.
  • název-souboru-nebo-složky-k-vyhledání je název hledaného souboru nebo složky.
  • akce-ke-provedení označuje operaci, která má být provedena, jako například kopírování, mazání nebo přesun.

V tomto tutoriálu si rozebereme, jak hledat soubory a složky, které vyhovují zadaným vzorům. Také si ukážeme, jak provádět akce se soubory a složkami, které příkaz find identifikuje. Tento průvodce je založen na systému Ubuntu, ale je aplikovatelný na většinu distribucí a verzí Linuxu.

Vyhledávání souborů a adresářů

Vyhledávání souborů podle názvu nebo přípony

Pro vyhledání konkrétního souboru spustíte následující příkaz z kořenového adresáře (/). Příkaz zahrnuje přesný název souboru, který hledáte.

find . -name file22.txt

Výstup:

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

Všimněte si, že výsledek obsahuje i cestu k souboru. To je důležité, pokud si nejste jisti, ve kterém adresáři se soubor nachází, nebo pokud existuje na více místech.

Soubor můžete vyhledat i v jiném adresáři, přestože se nacházíte v aktuálním umístění. V takovém případě musíte zadat cestu k adresáři, ve kterém chcete hledat.

find ./test -name file22.txt

Vyhledávání specifických souborů v jiném adresáři

V našem případě budeme v adresáři test hledat všechny soubory začínající slovem „file“.

find ./test -name file*

Výstup:

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

Vyhledávání souborů podle přípony

Pokud chcete v Linuxu vyhledat soubory s určitou příponou, zadejte ji do příkazu.

find . -name *.txt

Výstup:

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

Vyhledávání souborů a složek podle názvu

Pomocí níže uvedeného příkazu vyhledejte soubory a složky začínající písmeny qa. V našem počítači máme soubory qatree.txt a qa.txt a také složku s názvem qa.

Pokud spustíme příkaz:

find ./ -name "qa*"

Výsledkem bude tento výstup:

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

Příkaz vrací jak soubory, tak složky odpovídající kritériím hledání. Pokud chcete vyhledat pouze soubory nebo jen složky, musíte to v příkazu specifikovat.

Vyhledání pouze souborů nebo pouze složek

Pro vyhledání pouze souborů použijte přepínač -type f.

Pouze soubory:

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

Výstup:

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

Pouze složky:

Pro vyhledání pouze složek přidejte volbu -type d.

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

Výstup:

./home/qa

Příkaz hledání nerozlišující velikost písmen

Všechna hledání s přepínačem -name rozlišují malá a velká písmena a nenajdou shodné položky s rozdílnou velikostí písmen. Pro získání všech případů použijte volbu -iname.

find ./ -iname "qa*"

Výstup:

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

Vyhledávání souborů z více adresářů

Chcete-li vyhledávat soubory v různých adresářích, přidejte jejich cesty do příkazu. V našem případě prohledáme adresáře test a numeric.

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

Výstup:

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

Vyhledávání více souborů s různými příponami ze všech adresářů

Příkaz find můžete použít k vyhledání více souborů, které mají různé přípony, jako jsou *.doc, *.txt, *.pdf atd. Můžete to provést buď samostatně, jednu příponu po druhé, nebo pomocí jediného příkazu, který zahrne všechna požadovaná rozšíření.

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

Výstup:

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

Vyhledávání souborů obsahujících konkrétní text

Někdy potřebujete získat přístup k souboru, který obsahuje určitý text, ale nemůžete si vzpomenout na jeho název nebo umístění. Tento příkaz vám umožní najít všechny soubory obsahující váš cílový text.

Chcete-li vyhledat všechny soubory obsahující slovo „hyperkonvergence“, použijte:

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

Výstup:

/root/numeric/hci
    /root/HCIP

Volba -i umožňuje příkazu ignorovat malá a velká písmena a najde text bez ohledu na to, zda je napsán velkými písmeny, tedy hyperkonvergence, Hyperkonvergence atd.

Chcete-li vyhledat soubory v určitém adresáři, jednoduše jej přidejte do příkazu:

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

Výstup:

./numeric/hci

Prozkoumejte další příklady příkazů grep.

Vyhledávání souborů a adresářů podle velikosti

Můžete vyhledat všechny soubory nebo adresáře, které jsou menší, stejně velké nebo větší než určitá velikost, případně vyhledat soubory v určitém rozsahu nebo prázdné. Použijte vhodný formát velikosti v závislosti na typu souborů nebo adresářů, které hledáte.

Možnosti velikosti zahrnují:

  • c – bajty
  • k – kilobajty
  • M – megabajty
  • G – gigabajty

Vyhledávání souborů o konkrétní velikosti – rovnající se 30 MB

Pro vyhledání všech souborů o velikosti 30 MB použijte:

find / -size 30M

Vyhledání souborů větších než zadaná velikost

find -size +2M

Výstup:

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

Vyhledání souborů menších než 10 MB v aktuálním adresáři

find . -type f -size -10M

Vyhledání souborů o velikosti mezi 100–200 MB

Při hledání souborů v určitém rozsahu, například mezi 100 a 200 MB, použijte:

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

Vyhledání složek větších než 20 kB

find / -type d -size +20k

Vyhledání prázdných souborů a adresářů

Soubory:

find ./ -type f -size 0

nebo

find ./ -type f --empty

Složky:

find ./ -type d --empty

Vyhledávání souborů podle stáří nebo času úprav

Vyhledání souborů starších než n dní:

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

-mtime +8 vyhledá soubory .txt, které jsou starší než 8 dní.

Vyhledávání podle data změny

Tento příkaz vyhledá soubory upravené za posledních 17 hodin:

find . -mtime -17 -type f

Vyhledá adresáře upravené za posledních 10 dní:

find . -mtime -10 -type d

Vyhledání souborů na základě přístupu nebo úprav

Vyhledání souborů podle data nebo času přístupu. To vám umožní zobrazit soubory, které byly nebo nebyly zpřístupněny během zadaného období.

Chcete-li zobrazit soubory, které nebyly zpřístupněny během posledních 10 dnů v domovském adresáři, použijte:

find /home -atime +10

Soubory zpřístupněné přesně před 10 dny:

find /home -atime 10

Soubory zpřístupněné za posledních 10 dní:

find /home -atime -10

Vyhledání souborů upravených během posledních n dní

Můžete také vyhledat soubory v adresáři /home změněné během posledních 10 dnů pomocí příkazu:

find /home -mtime -10

Vyhledání souborů upravených v určitém období

Například všechny soubory upravené mezi 6 a 15 dny v domovském adresáři:

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

Soubory a adresáře zpřístupněné za posledních 10 minut

Pro vyhledání souborů, ke kterým se přistupovalo za posledních 10 minut, použijte volbu -amin.

find . -amin -10 -type f

Výstup:

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

Adresáře zpřístupněné během posledních 10 minut:

find . -amin -10 -type d

Vyhledávání souborů odpovídajících specifickým oprávněním

Syntaxe:

$ find -perm mode

Kde mode je oprávnění, které může být buď číselné, například 644, 655, 700, 777 atd., nebo písmenné, jako u=x, a=r+x atd.

Režim můžete zadat třemi různými způsoby:

  • Bez předpony, pokud chcete najít soubory s přesně zadanými oprávněními.
  • S - pro soubory s alespoň zadanými oprávněními. Toto vrátí soubory se zadanými i dalšími vyššími oprávněními.
  • S / vyžaduje zadání vlastníka nebo skupiny s oprávněním k souboru.

Vyhledání souborů s oprávněními 777

find -perm 777

Výstup:

./file1

Vyhledání souborů s alespoň 766:

find -perm -766

Výstup:

./file2
    ./file1

Příkaz hledá všechny soubory, kde platí:

  • Vlastník souboru má oprávnění pro čtení, zápis i spouštění.
  • Skupina má oprávnění pro čtení i zápis.
  • Ostatní mají oprávnění pro čtení i zápis.

Proto vrátí dva soubory, které splňují toto kritérium – file1 a file2. Soubory nemusí mít přesná oprávnění 766, mohou mít i další, ale musí mít alespoň specifikovaná.

Vyhledání souborů, do kterých může zapisovat vlastník

Nyní použijeme / k vyhledání souborů, do kterých může zapisovat jejich vlastník, skupina nebo jiní uživatelé.

find -perm /222

Výstup:

.
    ./file2
    ./file3
    ./file1

Výše uvedený příkaz hledá soubory, do kterých může zapisovat buď vlastník, nebo skupina. Vrátí soubory, do kterých lze zapisovat buď jedním, nebo oběma, ale ne nutně oběma. Chcete-li zobrazit soubory, kde mají oba oprávnění k zápisu, použijte předponu -.

find -perm -220

Výstup:

./file2
    ./file1

Vyhledání souborů vlastněných uživatelem

Vyhledání všech souborů vlastněných uživatelem Jack:

find /home -user jack

Výstup:

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

Vyhledání konkrétních souborů vlastněných uživatelem

Vyhledání všech textových souborů vlastněných uživatelem Jack:

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

Výstup:

/home/jack/docs/file32.txt

Vyhledání a vypsání souborů a složek spolu s jejich oprávněními

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

Výstup:

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

Vyhledávání výsledků a práce s nimi

V této části se podíváme na to, jak můžete pracovat se soubory, které odpovídají vzoru zadanému v příkazu find.

Vyhledání souborů a změna jejich oprávnění

Vyhledání a změna oprávnění u specifických typů souborů. V našem případě budeme pracovat se soubory PHP s různými oprávněními, jak je uvedeno níže.

[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

Nyní vyhledáme všechny soubory PHP (výše) a nastavíme jejich oprávnění na 755:

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

Příkaz vyhledá soubory PHP v adresáři ver a následně nastaví jejich oprávnění na 755 (rwxr-xr-x).

Výsledek:

[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

Vyhledání a změna oprávnění u souborů a adresářů

Vyhledání souborů s oprávněními 644 a změna na 655:

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

Můžete také vyhledat adresáře s oprávněními 644 a nastavit je na 755.

find . -type d -perm 644

Výstup:

./docs

Složka docs má oprávnění 644:

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

Abychom ji nastavili na 755, spustíme:

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

Nyní můžeme znovu zkontrolovat, co má přesně 755:

find . -type d -perm 755

Výstup:

./
    ./docs

Z výše uvedeného vidíme, že kořenový adresář a adresář docs mají oprávnění 755.

Příkaz ls -la poskytuje následující podrobnosti:

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

Vyhledání a kopírování souborů nebo adresářů

Vyhledání a kopírování konkrétního souboru do adresáře:

Následující příkaz vyhledá soubor file22.txt a zkopíruje jej do adresáře ~/tmp/images.

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

Vyhledání a kopírování jednoho typu souborů do adresáře:

Chcete-li vyhledat soubory, například obrázky s příponou .jpg, v aktuálním adresáři a zkopírovat je do jiného umístění, například do složky images, použijte:

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

Tím se vyhledají a zkopírují všechny soubory .jpg do složky ~/tmp/images.

Vyhledání a kopírování jednoho souboru do mnoha adresářů

Vyhledání a kopírování jednoho souboru do více adresářů:

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

Tím se vyhledá soubor hci a zkopíruje se do tří adresářů: /tmp/dir1/, /tmp/dir2/ a $HOME/3/.

Vyhledání a přesun souborů do jiného adresáře

Přesun známého souboru z jednoho adresáře do jiného. Chcete-li přesunout soubor universal.php:

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

Vyhledání a přesun souborů s určitou příponou do jiné složky:

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

Vyhledání specifických souborů a jejich přesun do určité jiné složky

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

Příkaz vyhledá všechny soubory, jejichž názvy začínají na uni a mají libovolnou příponu. Poté je přesune do adresáře /unifiles/.

Vyhledání a přesun souborů podle stáří

Vyhledání a přesun souborů starších než zadaný počet dní do jiného umístění, například do archivu.

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

Tím se vyhledají soubory .pdf starší než 20 dní a přesunou se do adresáře backup1.

Vyhledávání a odstranění souborů a adresářů

Syntaxe pro vyhledání a odstranění souborů nebo adresářů v aktuálním adresáři je:

find . -type f -name "soubor-k-odstranění" -exec rm -f {} ; pro odstranění pouze souborů nebo

find . -type d -name "složka-k-odstranění" -exec rm -rf {} ; pro odstranění pouze adresářů.

Vyhledání a odstranění pouze specifických souborů

Pro vyhledání a odstranění souborů začínajících na til použijte:

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

Pro vyhledání a odstranění adresářů začínajících na til:

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

Odstranění souborů i adresářů

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

Tím se odstraní soubory i adresáře začínající písmeny til.

Odstranění podle přípony

Následuje ukázka, jak vyhledat a odstranit všechny soubory .txt v aktuálním adresáři. Nahraďte txt jinou příponou, jako je bak, pdf nebo kterákoli jiná, kterou chcete odstranit.

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

Pokud chcete, aby se systém před smazáním každého souboru zeptal na potvrzení, přidejte volbu -i, jak je uvedeno níže:

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

Výstup:

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

Ve výchozím nastavení -rm neodstraní adresáře a pro rekurzivní odstranění musíte použít volbu -r. Tím je zajištěno odstranění prázdných adresářů a adresářů obsahujících soubory. Volba -f vynutí odstranění a používá se pro soubory i adresáře.

Vyhledání a odstranění souborů starších než n dní

Vyhledání a odstranění záložních souborů starších než 20 dní z aktuálního adresáře.

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

Tím se smažou všechny soubory .bak starší než 20 dní.

Vyhledání a odstranění pouze adresářů

Pro odstranění adresáře s názvem dir22:

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

Ujistěte se, že odpovídá velikosti názvu adresáře nebo použijte volbu -iname.

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

Odstraní Dir22 i dir22.

Pro potvrzení před odstraněním použijte volbu -i:

find . -type d -iname Dir