Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

posted 2015-12-13 20:58:36 +0100

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).