Přeskočit na obsah

Find: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
m narovnání přesměrování
Nsrotvt (diskuse | příspěvky)
Funkce návrhy odkazů: Přidány 3 odkazy.
 
(Není zobrazena jedna mezilehlá verze od jednoho dalšího uživatele.)
Řádek 1: Řádek 1:
{{DISPLAYTITLE:find}}
{{DISPLAYTITLE:find}}
{{Infobox - software}}
'''find''' je v [[Informatika|informatice]] název [[UN*X|unixového]] nástroje pro [[Rekurzivní funkce (programování)|rekurzivní]] prohledávání [[Adresář (informatika)|adresářového]] stromu [[souborový systém|souborového systému]]. Příkaz umožňuje pomocí parametrů určit vlastnosti hledaného objektu (tj. [[soubor]]u či adresáře), například velikost, část názvu a podobně, stejně jako akci, která má být s nalezeným objektem provedena.
'''find''' je v [[Informatika|informatice]] název [[UN*X|unixového]] nástroje pro [[Rekurzivní funkce (programování)|rekurzivní]] prohledávání [[Adresář (informatika)|adresářového]] stromu [[souborový systém|souborového systému]]. Příkaz umožňuje pomocí parametrů určit vlastnosti hledaného objektu (tj. [[soubor]]u či adresáře), například velikost, část názvu a podobně, stejně jako akci, která má být s nalezeným objektem provedena.


Řádek 5: Řádek 6:
<code>'''find [-H] [-L] [-P] [cesta...] [výraz]'''</code>
<code>'''find [-H] [-L] [-P] [cesta...] [výraz]'''</code>


První tři parametry určují, jak by měl příkaz přistupovat k [[Symbolický odkaz|symbolickým odkazům]]. Standardně je nikdy nenásleduje, což může být stanoveno parametrem <code>-P</code>. Parametr <code>-L</code> způsobí následování symbolický odkazů. S parametrem <code>-H</code> budou symbolické odkazy následovány pouze při zpracovávání parametrů příkazového řádku. Pokud není uvedena cesta, prohledává se aktuální adresář.
První tři parametry určují, jak by měl příkaz přistupovat k [[Symbolický odkaz|symbolickým odkazům]]. Standardně je nikdy nenásleduje, což může být stanoveno parametrem <code>-P</code>. Parametr <code>-L</code> způsobí následování symbolický odkazů. S parametrem <code>-H</code> budou symbolické odkazy následovány pouze při zpracovávání parametrů [[Příkazový řádek|příkazového řádku]]. Pokud není uvedena cesta, prohledává se aktuální adresář.


Prvky výrazu jsou odděleny mezerami a jsou vyhodnocovány zleva doprava. Výraz může obsahovat logické operátory [[Logický člen#AND|AND]] (<code>-a</code>) a [[Logický člen#OR|OR]] (<code>-o</code>), stejně jako složitější [[Predikát (logika)|predikáty]]. [[GNU]] find má velké množství rozšíření proti standardu [[POSIX]].
Prvky výrazu jsou odděleny mezerami a jsou vyhodnocovány zleva doprava. Výraz může obsahovat logické operátory [[Logický člen#AND|AND]] (<code>-a</code>) a [[Logický člen#OR|OR]] (<code>-o</code>), stejně jako složitější [[Predikát (logika)|predikáty]]. [[GNU]] find má velké množství rozšíření proti standardu [[POSIX]].
Řádek 61: Řádek 62:
find . \( -name "*jsp" -o -name "*java" \) -type f -ls
find . \( -name "*jsp" -o -name "*java" \) -type f -ls


Příkaz vypíše rozšířené informace o souborech končících na ''jsp'' nebo ''java''. Operátor [[Logický člen#OR|OR]] může být zapsat i jako <code>-o</code>. Při neuvedení operátoru je předpokládán operátor [[Logický člen#AND|AND]]. Použití závorek je nutné, v mnoha [[Shell (programování)|shellech]] musí být před nimi zpětná lomítka aby se shellu zamezilo závorky interpretovat jako své speciální znaky.
Příkaz vypíše rozšířené informace o souborech končících na ''jsp'' nebo ''java''. Operátor [[Logický člen#OR|OR]] může být zapsat i jako <code>-o</code>. Při neuvedení operátoru je předpokládán operátor [[Logický člen#AND|AND]]. Použití závorek je nutné, v mnoha [[Shell (programování)|shellech]] musí být před nimi zpětná [[Lomítko|lomítka]] aby se shellu zamezilo závorky interpretovat jako své speciální znaky.


===Provedení akce===
===Provedení akce===
find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \;
find /var/ftp/mp3 -name "*.mp3" -type f -exec [[chmod]] 644 {} \;


Příkaz změní oprávnění všech souborů s příponou ''.mp3'' v adresáři ''/var/ftp/mp3'' na 644. Akce je vykonána pomocí parametru <code>-exec chmod 644 {} \;</code> v příkazu. Pro každý nalezený soubor je proveden příkaz <code>chmod 644 {}</code>, kde se <code>{}</code> nahradí jménem souboru. Středník označuje konec příkazu. Oktalově zapsané oprávnění 644 odpovídá záznamu <code>rw-r--r--</code> dává vlastníkovi souboru plná oprávnění pro čtení a zápis do souboru, zatímco ostatní uživatelé mají pouze práva pro čtení. V některých [[Shell (programování)|shellech]] musí být <code>{}</code> v uvozovkách. Příkaz samotný by neměl být v uvozovkách, jinak by vypsal například následující chybu:
Příkaz změní oprávnění všech souborů s příponou ''.mp3'' v adresáři ''/var/ftp/mp3'' na 644. Akce je vykonána pomocí parametru <code>-exec chmod 644 {} \;</code> v příkazu. Pro každý nalezený soubor je proveden příkaz <code>chmod 644 {}</code>, kde se <code>{}</code> nahradí jménem souboru. Středník označuje konec příkazu. Oktalově zapsané oprávnění 644 odpovídá záznamu <code>rw-r--r--</code> dává vlastníkovi souboru plná oprávnění pro čtení a zápis do souboru, zatímco ostatní uživatelé mají pouze práva pro čtení. V některých [[Shell (programování)|shellech]] musí být <code>{}</code> v uvozovkách. Příkaz samotný by neměl být v uvozovkách, jinak by vypsal například následující chybu:

Aktuální verze z 20. 7. 2023, 22:13

find
Typ softwarustandardní UNIXová utilita či příkaz a počítačový program
Některá data mohou pocházet z datové položky.

find je v informatice název unixového nástroje pro rekurzivní prohledávání adresářového stromu souborového systému. Příkaz umožňuje pomocí parametrů určit vlastnosti hledaného objektu (tj. souboru či adresáře), například velikost, část názvu a podobně, stejně jako akci, která má být s nalezeným objektem provedena.

find [-H] [-L] [-P] [cesta...] [výraz]

První tři parametry určují, jak by měl příkaz přistupovat k symbolickým odkazům. Standardně je nikdy nenásleduje, což může být stanoveno parametrem -P. Parametr -L způsobí následování symbolický odkazů. S parametrem -H budou symbolické odkazy následovány pouze při zpracovávání parametrů příkazového řádku. Pokud není uvedena cesta, prohledává se aktuální adresář.

Prvky výrazu jsou odděleny mezerami a jsou vyhodnocovány zleva doprava. Výraz může obsahovat logické operátory AND (-a) a OR (-o), stejně jako složitější predikáty. GNU find má velké množství rozšíření proti standardu POSIX.

Příklady použití

[editovat | editovat zdroj]

V aktuálním adresáři

[editovat | editovat zdroj]
find . -name 'my*'

Příkaz prohledá aktuální adresář (reprezentovaný tečkou) včetně jeho podadresářů a vyhledá soubory začínající na my. Uvozovky zabraňují shellu, aby nahradil výraz my* seznamem jmen souborů začínajícími na řetězec my v aktuálním adresáři (tzv. žolíková expanze).

Pouze soubory

[editovat | editovat zdroj]
find . -name "my*" -type f

Příkaz vypisuje pouze soubory, vynechá všechny adresáře, speciální soubory, symbolické odkazy, atd.

Předchozí příklady vytvořily seznam souborů, protože standardně příkaz find spustí akci -print (tj. vypsání nalezeného objektu).

find . -name "my*" -type f -ls

Příkaz vypíše seznam nalezených souborů spolu s jejich rozšířenými informacemi.

Prohledání všech adresářů

[editovat | editovat zdroj]
find / -type f -name "myfile" -print

Příkaz prohledá všechny adresáře v počítači a na terminál vypíše seznam souborů, které se jmenují myfile.

Prohledání všech adresářů kromě jednoho

[editovat | editovat zdroj]
find / -path excluded_folder -prune -o -type f -name myfile -print

Příkaz prohledá všechny adresáře v počítači kromě adresáře excluded_folder a seznam nalezených souborů, které se jmenují myfile, vypíše na terminál.

Specifikovaný adresář

[editovat | editovat zdroj]
find /home/weedly -name "myfile" -type f -print

Příkaz prohledá pouze adresář /home/weedly (domácí adresář uživatele weedly) a seznam nalezených souborů, které se jmenují myfile, vypíše na terminál.

Prohledání několika adresářů

[editovat | editovat zdroj]
find local /tmp -name mydir -type d -print

Příkaz prohledá adresář local v aktuálním adresáři a adresář /tmp, seznam nalezených adresářů, které se jmenují mydir, vypíše na terminál.

Ignorování chyb

[editovat | editovat zdroj]

Pokud příkaz find používá běžný uživatel, a ne root, může být vhodné ignorovat výpisy odepření přístupu a jiné chyby. Protože jsou chyby směrovány na výstup stderr, stačí ho přesměrovat do /dev/null:

find / -name "myfile" -type f -print 2>/dev/null

Alternativní metodou je použití příkazu grep:

find . -name "myfile" |& grep -v "Permission denied"

Příkaz vypíše na terminál seznam souborů, které se jmenují myfile a přihlášený uživatel k nim má přístupová práva.

Více možností jména souboru

[editovat | editovat zdroj]
find . \( -name "*jsp" -o -name "*java" \) -type f -ls

Příkaz vypíše rozšířené informace o souborech končících na jsp nebo java. Operátor OR může být zapsat i jako -o. Při neuvedení operátoru je předpokládán operátor AND. Použití závorek je nutné, v mnoha shellech musí být před nimi zpětná lomítka aby se shellu zamezilo závorky interpretovat jako své speciální znaky.

Provedení akce

[editovat | editovat zdroj]
find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \;

Příkaz změní oprávnění všech souborů s příponou .mp3 v adresáři /var/ftp/mp3 na 644. Akce je vykonána pomocí parametru -exec chmod 644 {} \; v příkazu. Pro každý nalezený soubor je proveden příkaz chmod 644 {}, kde se {} nahradí jménem souboru. Středník označuje konec příkazu. Oktalově zapsané oprávnění 644 odpovídá záznamu rw-r--r-- dává vlastníkovi souboru plná oprávnění pro čtení a zápis do souboru, zatímco ostatní uživatelé mají pouze práva pro čtení. V některých shellech musí být {} v uvozovkách. Příkaz samotný by neměl být v uvozovkách, jinak by vypsal například následující chybu:

find: echo "mv ./3bfn rel071204": No such file or directory

která znamená, že se příkaz find snaží spustit soubor pojmenovaný echo "mv ./3bfn rel071204".

V případě mnoha nalezených souborů je efektivnější spustit akce pomocí příkazu xargs, který má modernější implementaci a lépe zvládne zpracovat dlouhé seznamy. Následují příkaz zajistí, že soubory s bílými znaky ve jméně nebudou rozděleny shellem:

find . -print0 | xargs -0 PŘÍKAZ

Seznam generovaný příkazem find je okamžitě předáván příkazu xargs, který spustí PŘÍKAZ se jmény souborů jako argumenty.

V tomto článku byl použit překlad textu z článku Find na anglické Wikipedii.