Oboji je kvuli findu, aby vedel, jak s prikazem nakladat.
-exec je akce, ktera rika, aby find "pro kazdy soubor" (viz nize) spustil prikaz. Ten muze byt libovolny a mit libovolny pocet parametru (prepinacu, argumentu, ...). No a samozrejme to nejdulezitejsi je pouziti jmena souboru, ktery find najde. Na to slouzi dvojznak {}. V shellu to nic neznamena, ale find to pochopi tak, ze tento dvojznak nahradi jmenem souboru, ktery nasel. Pokud se ti to libi vice, muzes klidne pouzit "{}"
\; je zase dalsi placeholder, ktery findu rekne, ze nyni uz konci zadavani parametru pro -exec (a konci tim i dany prikaz). find chce videt strednik, ktery se bezne pouziva jako konec prikazu. Kdyz tam ale napises strednik, tak ho samozrejme bash "sezere" a find tento parametr vubec neobdrzi. Proto je treba ho ochranit. Pokud se nekomu libi vice, muze opet pouzit ";"
-exec je akce jako kazda jina (napr -print, -ls) a ma svoji hodnotu (navratovy kod spusteneho prikazu) a muzes tak pokracovat v predikatech. Kdyby nebylo \;, nemas jak findu rict "tady konci -exec a zacina neco jineho.
Napr: find / -type f -exec test -x {} \; -print najde tebou spustitelne soubory (simulace gnu -executable).
Zaverem: neni treba pouzivat ;, existuje i +. To find reprezentuje tak, ze spusti jeden prikaz pro celou sadu nalezenych souboru (ktere umisti jako samostatne argumenty misto {}). To se nekdy hodi hlavne kvuli vykonosti, kde se prikaz zavola radove menekrat.
Pokud tech souboru nebude mnoho (prilis mnoho), tak s + spusti find pouze jeden prikaz.
Napr: find . -type f -name '*.sh' -exec chmod +x {} + pro nastaveni execute prava vsem .sh souborum. Tento prikaz probehne radove rychleji nez to same s \; misto + (zalezi tedy na velikosti struktury a poctu .sh souboru).
Copyright students of FIT CTU and others, 2014. Content on this site is licensed under a Creative Commons Attribution-ShareAlike 4.0 International license.