21
Arkisto: wikiin siirrettävät / Re: Ubuntun yhteiskäyttö (jaettu kansio, sekä käyttäjien ja ryhmien hallinta)
« : 26.09.06 - klo:11.25 »Sekin tietenkin auttaisi jos kertoisit että mitä toi kokonaisuudessaan tekee (tuon findin olen koittanut ohjata tekstitiedostoon niin sen tiedän), mutta miten tuo xargs käsittelee sitä?Tuosta xargsin käytöstä sen verran, että se on vain suunniteltu nopeuttamaan toimintaa. Ilman sitäkin tämän saa toimimaan.
find-komennon voi määrätä suorittamaan muitakin toimintoja kuin löydettyjen tiedostojen tulostamisen. Jos komennolle antaa -exec-parametrin, niin se suorittaa halutun käskyn joka kerran kun hakukriteereihin sopiva tiedosto löytyy.
Esim: sudo find /video/ -type f -exec chmod {} 664
Tuossa komennossa find ajaa chmod komennon aina kun se löytää tiedoston. Tuo {} laajennetaan kulloinkin löydetyksi tiedostonimeksi. Voipi muuten olla, että tuon joutuu kirjoittamaan muotoon \{\}, jotta bash ei laajenna sitä itse...
Ongelma on siinä, että find kutsuu joka tiedoston kohdalla tuota chmod-komentoa suorittamaan nuo oikeuksien muuttamiset ja jää odottamaan että chmod saa hommansa hoidettua ennen kuin etsii seuraavan tiedoston. Jos sinulla on 100000 pikkutiedostoa tuolla, niin homma käynee aika hitaasti.
Siksi on xargs, joka ottaa vastaan ison kasan findin löytämiä tiedostonimiä ja syöttää ne isoissa erissä tuolle chmod-komennolle. En tiedä kuinka monta tiedostoa xargs käsittelee kerralla, mutta lopputulos on joka tapauksessa se, että chmod-komentoa kutsutaan huomattavasti harvemmin ja homma nopeutuu.
chmod taitaa olla vähän huono esimerkki tässä, mutta kuten tässä englanninkielisessä viestissä mainitaan, niin esim. grep-komennon kanssa nopeusetu lienee aika paljon suurempi.
Tämä vain mainitakseni, että ei tuo xargs sinänsä mikään välttämätön ole ja voithan juhhe1 vaikka kokeilla miten tuo toimii sinulla käyttäen tätä -exec-versiota.
Mikko