Nalézt

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 23. ledna 2020; kontroly vyžadují 7 úprav .

find - nástroj pro vyhledávání souborů podle názvu a dalších vlastností, používaný v operačních systémech typu UNIX . Může prohledávat jeden nebo více adresářů pomocí kritérií zadaných uživatelem . Ve výchozím nastavení vrátí všechny soubory v pracovním adresáři . Navíc umožňuje uživateli aplikovat určité akce na všechny nalezené soubory. Podporovány jsou také regulární výrazy . Chcete-li vyhledávat soubory podle obsahu, použijte nástroj grep . findfind

Seznam klíčů


Příklady

Hledat v aktuálním adresáři

Najděte všechny soubory v aktuálním a podřízeném adresáři, které začínají na můj .

Poznámka: z hlediska unixu je vše, včetně adresářů, soubor .

nalézt. -jméno 'můj*'

Chcete-li vyhledávat pouze podle názvů souborů, musíte použít další možnost-type f 

nalézt. -jméno 'moje*' -typ f

Hledat v konkrétním adresáři

Najděte všechny soubory v kořenovém a podřízeném adresáři, které začínají na můj .

Prohledávání kořenového adresáře je ekvivalentní prohledávání celého počítače.

najít / -jméno 'moje*'

Vyhledávání souborů v adresářích /usr/local/mana/opt/local/man

najít /usr/local/man /opt/local/man -name 'my*'

Hledání více názvů souborů

Najděte všechny soubory v aktuálním a podřízeném adresáři, které začínají na my nebo qu .

Všimněte si, že ve výchozím nastavení jsou všechny argumenty spojeny pomocí logických a (volba -a, z angličtiny  a ). Pokud potřebujete spojit několik argumentů s logickým nebo  - použijte volbu -o, z angličtiny.  nebo .

nalézt. \( -name "my*" -o -name "qu*" \) -print

Hledejte více typů souborů pomocí regulárních výrazů

Najděte všechny soubory v aktuálním a podřízeném adresáři, jejichž přípona odpovídá uvedeným.

Toto vyhledávání se provádí pomocí regulárních výrazů .

nalézt. -type f -regex ".*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)"

Předchozí příklad lze také napsat pomocí regulárních výrazů

nalézt. -type f -regex "\(my\|qu\).*"

Provedení příkazu

Volba -exec provede příkaz, který za ní následuje, a nahradí {}jej aktuálním souborem. Najděte všechny adresáře pod zadaným adresářem a změňte jejich oprávnění pomocí příkazu chmod :

najít /cesta -typ d -exec chmod 0755 {} \;

Volba -exec je asi 10krát pomalejší než přesměrování výstupu přes xargs , takže se doporučuje napsat tento kód takto:

najít /cesta -typ d | xargs chmod 0755

Adresáře s názvy obsahujícími mezery však nebudou zpracovány metodou přesměrování xargs, takže byste měli použít první možnost, vyplněnou:

najít /cesta -typ d -exec chmod 0755 "{}" \;

Nebo použijte možnost -print0a -0umožní vám zpracovat argumenty obsahující mezery a uvozovky:

najít /cesta -typ d -tisk0 | xargs -0 chmod 0755

Vyhledejte všechny soubory php.ini v aktuálním adresáři a nahraďte text v každém nalezeném souboru pomocí příkazu sed .

nalézt. -name 'php.ini' -exec sed -i 's/log_errors = Off/log_errors = On/g' "{}" \;

Komplexní vyhledávání v několika typech souborů a náhrady textu v každém z nich, z aktuálního adresáře a níže.

nalézt. -regex ".*\.\(php\|js\|css\)" -exec sed -i 's/\/bitrix\/templates\//\/local\/templates\//g' "{} " \;

Vyhledávání podle času vytvoření

Najděte a vypište soubory v celém souborovém systému, které byly upraveny na poslední chvíli:

najít / -mmin -1 -tisk

Najděte a vypište soubory v celém souborovém systému, které byly upraveny před více než 31 dny:

najít / -mtime +31 -tisk

Hledat podle velikosti souboru

Najděte a vypište soubory v celém systému souborů, jejichž velikost je větší než 100 MB:

najít / -velikost +100M -tisk

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

V tomto příkladu se vyhledávání provádí v souborech vlastněných uživatelem jménem ilya

nalézt. -uživatel ilya

Prohledávání souborů s omezením hloubky

Hloubka vyhledávání je relativní k adresáři uvedenému v argumentu příkazu.

Spustí vyhledávání ve složce /var/www, ale ne hlouběji /var/www/*/*/*/*.

najdi /var/www -maxdepth 4 -name 'restore.php'

Vyhledávejte soubory podle seznamu adresářů.

Vyhledá soubory v zadaných adresářích.

find /var/spool/postfix/ { odloženo,aktivní,maildrop,příchozí } / -type f

Vyhledávání souborů podle masky s výjimkou.

Vyhledá soubory php v aktuálním adresáři, kromě index.php

nalézt. -jméno "*.php"  ! -jméno "index.php"

Rekurzivně odstraňte soubor z aktuálního adresáře do dané hloubky.

Odstraní všechny soubory restore.phpz aktuálního adresáře až do 4 úrovní vnoření vzhledem k argumentu příkazového řádku

Spustí vyhledávání ve složce /var/www, ale ne hlouběji /var/www/*/*/*/*a odstraní všechny restore.phpnalezené soubory.

najít /var/www -maxdepth 4 -name 'restore.php' -exec rm -r {} \;

Ignorování chyb

Pokud během vyhledávání dojde k chybě (například neexistuje přístup pro čtení z adresáře), výstup příkazu bude méně informativní. Přesměrujte výstup STDERR do /dev/null .

find / -name 'secret.keys' -print 2 >/dev/null

Můžete také použít jednu z následujících možností:

find / -name "název souboru k hledání" |& grep -v 'Povolení odepřeno' find / -name "název souboru, který hledáte" |& grep -v 'Povolení odepřeno'

Odkazy

  • find(1) - manuálová stránka pro uživatelské příkazy GNU/Linux  (anglicky)  (anglicky)