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

Linuxový příkaz find je mocný nástroj, který umožňuje správcům systému vyhledávat a spravovat soubory a adresáře na základě široké škály vyhledávacích kritérií. Může najít adresáře a soubory podle jejich názvu, typu nebo přípony, velikosti, oprávnění atd.

Kromě vyhledání souborů a adresářů vám kombinace příkazu find s ostatními umožňuje provádět akce na základě výsledků. Přidání volby -exec umožňuje sysadminům spouštět externí příkazy a provádět akce, jako je kopírování, přesouvání, mazání nebo změna oprávnění souborů odpovídajících zadaným kritériím, jako je velikost, název atd.

V tomto článku začneme vysvětlením základních linuxových příkazů find s příklady. To vám ukáže, jak najít soubory a adresáře. Poté vám ukážeme, jak pomocí volby -exec jednat se soubory nebo adresáři na základě jejich velikosti, oprávnění atd.

Obecná syntaxe příkazu find je

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

Kde,

  • cesta určuje adresář.
  • name-of file or dir-to-search : Název souboru nebo adresáře, který se má hledat
  • akce k provedení: jako je kopírování, mazání, přesun atd.

V tomto tutoriálu vysvětlíme, jak najít soubory a adresáře odpovídající zadaným vzorům. Také uvidíme, jak provádět akce se soubory nebo adresáři, které příkaz find najde. Příručka je založena na Ubuntu, ale je použitelná pro většinu distribucí a verzí Linuxu.

Table of Contents

Najděte soubory a adresáře

Najděte konkrétní soubory podle názvu nebo přípony

Chcete-li vyhledat konkrétní soubor, spusťte následující příkaz z kořenového adresáře (/). Příkaz obsahuje přesný název souboru, který hledáte.

find . -name file22.txt

Výstup

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

Upozorňujeme, že výsledky zahrnují cestu. To je důležité, pokud neznáte adresář, kde je soubor umístěn, nebo když je na více než jednom místě.

Můžete také vyhledat soubor v jiném adresáři, když jste stále v aktuálním umístění. V tomto případě musíte zadat cestu k adresáři, ve kterém chcete hledat.

find ./test -name file22.txt

Hledání konkrétních souborů v jiném adresáři

V našem případě budeme v adresáři test hledat všechny začínající souborem písmen.

find ./test -name file*

Výstup

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

Vyhledejte soubory podle přípony

Chcete-li v Linuxu najít soubor s určitou příponou, přidejte jej 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

Vyhledejte soubory a adresáře podle názvu

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

Pokud spustíme příkaz;

find ./ -name "qa*"

Vrací následující výstup

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

Příkaz vrátí soubory i adresáře odpovídající kritériím vyhledávání. Chcete-li najít pouze soubory nebo adresáře, musíte to zadat v příkazu.

Najít pouze soubory nebo adresáře

Pouze pro soubory použijte přepínač typu f.

Pouze soubory

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

Výstup

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

Pouze adresáře

Přidejte volbu typu d k vyhledání pouze adresářů.

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

Výstup

./home/qa

Příkaz hledání bez ohledu na velikost písmen

Všechna vyhledávání s přepínačem -name rozlišují velká a malá písmena a neposkytují výsledky s velkými písmeny. Chcete-li získat všechny případy, použijte volbu -iname.

find ./ -iname "qa*"

Výstup

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

Vyhledejte soubor z více adresářů

Chcete-li najít soubory v různých adresářích, přidejte jejich cesty do příkazu. V našem případě zkontrolujeme testovací a číselné adresáře.

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

Výstup

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

Najděte 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é sdílejí různé přípony, jako je *.doc, *.txt *.pdf atd. To lze provést samostatně, jednu příponu po druhé, nebo pomocí jediného příkazu, který zahrnuje všechny požadovaná rozšíření.

najít . -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

Najděte soubory obsahující určitý text

Někdy chcete získat přístup k souboru obsahujícímu 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 velký nebo ne, tj. hyperkonvergence, Hyperkonvergence atd.

Chcete-li vyhledat soubory v určitém adresáři, jednoduše je 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.

Najděte soubory a adresáře podle velikosti

Můžete najít všechny soubory nebo adresáře, které jsou menší, stejné nebo větší než určitá velikost, 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 – bajtů

k – kilobajtů

M – megabajty

G – gigabajty

Najděte soubory určité velikosti – rovnající se 30 MB

Chcete-li hledat, vyhledejte všechny soubory o velikosti 30 MB

find / -size 30M

Najít soubory větší než zadaná velikost

find -size +2M

Výstup

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

Najděte soubory menší než 10 MB v aktuálním adresáři

find . -type f -size -10M

Najděte soubory o velikosti mezi 100–200 MB

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

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

Hledejte adresáře větší než 20 kb

najít / -typ d -velikost +20k

Najděte prázdné soubory a adresáře.

Soubory

najít ./ -typ f -velikost 0

nebo

find ./ -type f –empty

Adresáře

find ./ -type d –empty

Najděte soubory podle věku nebo času úprav

Najděte soubory starší než n dní

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

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

Podle data změny

Toto 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 

Najděte soubory na základě přístupu nebo úprav

Vyhledejte soubory podle data nebo času přístupu. To vám umožní vidět 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.

find /home -atime +10

Soubory přístupné přesně před 10 dny

find /home -atime 10

Přístup za posledních 10 dní

find /home -atime -10

Najít soubory upravené 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 

Najít soubory upravené 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 přístupné za posledních 10 minut

Chcete-li najít soubory, 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 přístupné během posledních 10 minut

find . -amin -10 -type d

Najděte soubory odpovídající konkrétním oprávněním

Syntax

$ find -perm mode

Kde mode je oprávnění, které je buď číselné, například 644, 655, 700, 777 atd., nebo písmena jako u=x, a=r+x atd.

Režim můžete určit následujícími třemi různými způsoby.

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

    find -perm 777

    Výstup

    ./file1

    Najděte soubory s alespoň 766
    najít -perm -766

    Výstup

    ./file2
    ./file1

    Příkaz hledá všechny soubory, ve kterých je

    • Vlastník souboru má oprávnění ke čtení/zápisu/spouštění.
    • Skupina má oprávnění ke čtení/zápisu
    • Ostatní mají oprávnění ke čtení/zápisu

    Jako takový vrátí dva soubory, které splňují toto kritérium – soubor1 a soubor2. Soubory nemusí mít přesná oprávnění 766 a mohou mít další tak dlouhá, ale musí mít alespoň specifikovaná.

    Najděte soubory, do kterých může vlastník zapisovat

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

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

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

    find -perm -220

    Výstup

    ./file2
    ./file1

    Najděte soubory vlastněné uživatelem

    Najděte všechny soubory vlastněné Jackem

    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

    Najděte konkrétní soubory vlastněné uživatelem

    Najděte všechny textové soubory vlastněné Jackem

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

    Výstup

    /home/jack/docs/file32.txt

    Vyhledejte a vypište soubory a adresáře 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

    Najděte výsledky a jednejte podle nich

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

    Najděte soubory a změňte oprávnění

    Najděte a změňte oprávnění určitý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 nahradíme jejich oprávnění 755

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

    Příkaz vyhledá soubory PHP v adresáři ver a poté 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

    Najděte a změňte oprávnění k souborům a adresářům

    Najděte soubory s oprávněními 644 a změňte je tak, aby měly oprávnění 655

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

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

    find . -type d -perm 644

    Výstup

    ./docs   

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

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

    Abychom to nastavili na 755, spustíme

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

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

    find . -type d -perm 755

    Výstup
    .
    ./docs

    Shora 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

    Najděte a zkopírujte soubory nebo adresáře

    Najděte a zkopírujte konkrétní soubor do adresáře

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

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

    Najděte a zkopírujte jeden typ souborů do adresáře

    Chcete-li najít soubory, jako jsou 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 obrázků, použijte;

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

    To najde a zkopíruje všechny soubory jpg do složky ~/tmp/images.

    Najděte a zkopírujte jeden soubor do mnoha adresářů

    Najděte a zkopírujte jeden do více adresářů.

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

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

    Najděte a přesuňte soubory do jiného adresáře

    Přesunutí známého souboru z adresáře do jiného. Chcete-li přesunout soubor universal.php;

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

    Vyhledávejte a přesouvejte soubory s určitou příponou do jiné složky

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

    Najděte určité soubory a přesuňte se do konkrétní jiné složky

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

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

    Najděte a přesouvejte soubory podle věku

    Najděte a přesuňte soubory starší než zadané dny do jiného umístění, například do archivu.

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

    To vyhledá soubory PDF starší než 20 dní a přesune je do adresáře backup1.

    Najít a odstranit soubory a adresáře

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

    najít . -type f -name “soubor k odstranění” -exec rm -f {} ; pouze smazat soubory nebo

    najít . -type d -name “dir-to-delete” -exec rm -rf {} ; pouze pro mazání adresářů

    Najděte a odstraňte pouze určité soubory

    Chcete-li najít a odstranit soubory začínající na til, použijte;

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

    Chcete-li vyhledat a odstranit adresáře začínající na til

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

    Odstraňte soubory i adresáře

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

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

    Smazat podle přípony

    Níže je uvedeno, jak můžete najít a odstranit všechny soubory txt v aktuálním adresáři. Nahraďte txt jinou příponou, jako je bak, pdf nebo kteroukoli jinou, kterou chcete odstranit.

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

    V případě, že chcete, aby vás systém před smazáním každého souboru vyzval k 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 zajištění rekurzivního odstranění musíte použít volbu –r. Tím je zajištěno mazá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.

    Vyhledejte a odstraňte soubory starší než n dní

    Najděte a odstraňte záložní soubory starší než 20 dní z aktuálního adresáře.

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

    Tímto smažete všechny soubory .bak starší než 20 dní.

    Najít a odstranit pouze adresáře

    Chcete-li odstranit adresář 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 Dir22 -exec rm -rf -i {} ;

    Výstup
    rm: odebrat adresář ‚./Dir22‘? n
    rm: odebrat adresář ‚./dir22‘? y

    V našem případě jsme zadali n pro adresář Dir22, který nebude odstraněn, a y pro adresář dir22, který bude nyní odstraněn.

    Najděte a odstraňte prázdné soubory

    K vyhledání prázdných souborů a jejich automatickému odstranění můžete použít kterýkoli z následujících příkazů.

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

    nebo
    najít ./ -typ f -velikost 0 | xargs rm -f
    nebo
    find ./ -type f -size 0 –delete

    Najděte a odstraňte prázdné adresáře

    K odstranění prázdných adresářů použijeme volbu d.

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

    Další alternativou je použití delete namísto remove.

    find ./ -type d -empty -delete

    Upozorňujeme, že odstranění systémových nebo kritických souborů z počítače může poškodit operační systém nebo aplikace nebo vést ke ztrátě důležitých dat.

    Chcete-li se vyhnout náhodným smazáním, je osvědčeným postupem použít účet uživatele bez oprávnění root. Také se ujistěte, že odstraňujete správné soubory, které nejsou užitečné, a že máte zálohu všech datových souborů pro každý případ.

    Co bude dál?

    Pokračujte a vyzkoušejte výše uvedené příkazy Linux find ve vaší laboratoři nebo prostředí NON PRODUCTION. Podívejte se, zda můžete některé použít k automatizaci čištění systému souborů pomocí Crontab. A abyste zvládli Linux, podívejte se na toto online kurz.