Find: Porovnání verzí
m narovnání přesměrování |
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
Typ softwaru | standardní 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.
Syntaxe
[editovat | editovat zdroj]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říkazy
[editovat | editovat zdroj]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.
Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Find na anglické Wikipedii.