Esimerkki xargs-komennon käytöstä

Kuvaus ja esittely

Xargs- komentoa käytetään tyypillisesti komentorivillä, jossa yhden komennon lähdettä siirretään syöttö-argumentteina toiseen komentoon.

Monissa tapauksissa tämän suorittamiseksi ei tarvita erityistä komentoa, kuten xargs, koska "putki" ja "uudelleenohjaus" operaattorit suorittavat saman tyyppisen tapahtuman. Kuitenkin joskus on olemassa ongelmia perusputki- ja uudelleenohjausmekanismin kanssa, esim. Jos argumentit sisältävät välilyöntejä, xargs voittaa.

Lisäksi xargs suorittaa määritetyn komennon toistuvasti, tarvittaessa, käsittelemään kaikki sille annetut argumentit. Itse asiassa voit määrittää, kuinka monta argumenttia pitäisi lukea standardi tulovirta aina, kun xargs suorittaa määritetyn komennon.

Yleensä xargs-komentoa tulisi käyttää, jos yhden komennon lähtöä käytetään osana toisen komennon vaihtoehtoja tai argumentteja, joihin dataa lähetetään (käyttäen putkioperaattoria "|"). Säännöllinen putkisto riittää, jos tiedot on tarkoitus olla toisen komennon (standardi) tulo.

Jos esimerkiksi käytät ls- komentoa tuottaaksesi luettelon tiedostonimistä ja -hakemistoista ja tämän jälkeen putkeksi tämän listan xargs-komentoon, jossa voit suorittaa echo-toiminnon , voit määrittää, kuinka monta tiedostoa tai hakemiston nimeä käsitellään kaiuttimella jokaisella iteraatiolla seuraavasti :

ls | xargs -n 5 echo

Tässä tapauksessa echo vastaanottaa viisi tiedoston tai hakemiston nimeä kerrallaan. Koska kaiku lisää uuden rivin merkin loppuun, jokaiselle riville kirjoitetaan viisi nimeä.

Jos suoritat komennon, joka palauttaa suuret ja ennalta arvaamattomat numerotiedot (esim. Tiedostonimet), jotka siirretään toiseen komentoon jatkokäsittelyä varten, on hyvä ohjata enimmäismäärää argumentteja, joita toinen komento vastaanottaa ylikuormituksen ja kaatumisen välttämiseksi.

Seuraava komentorivi jakaa tiedostojen nimien virran, jotka on tuotettu 200: n ryhmiin kuuluvien löydösten välillä, ennen kuin ne siirretään cp- komentoon, joka kopioi ne varmuuskopiohakemistoon .

Etsi ./ -tyy f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Etsi-komennon "./" -asetus määrittää nykyisen hakemiston hakemiseen. "-type f" -symboli rajoittaa haun tiedostoihin, ja "-name" * .txt "-lippu suodattaa edelleen mitä tahansa, jolla ei ole" .txt "-laajennusta. -i lippu xargsissa ilmoittaa, että { } merkintä edustaa jokaista höyryn tiedostonimeä.

Seuraava komento löytää tiedostot, jotka ovat nimeltään ydin hakemistossa / tmp tai sen alapuolella, ja poistaa ne.

etsi / tmp-nimi ydin -tyy f -print | xargs / bin / rm-f

Huomaa, että tämä toimii väärin, jos on olemassa tiedostoja, jotka sisältävät uusia viivoja, yksittäisiä tai kaksinkertaisia ​​lainauksia tai välilyöntejä. Seuraavassa versiossa käsitellään tiedostonimiä siten, että tiedosto- tai hakemistomerkinnät, jotka sisältävät yhden tai kaksinkertaisen lainausmerkin, välilyönnin tai uudelle rivin, käsitellään oikein.

etsi / tmp -name ydin -tyyppi f -print0 | xargs -0 / bin / rm-f

-i- vaihtoehdon sijaan voit käyttää myös -I- merkintää, joka määrittää merkkijonon, joka korvataan komentorivityyppien syöttörivillä kuten tässä esimerkissä:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / koodi>

Korvaava merkkijono on määritelty nimellä "{}". Tämä tarkoittaa, että komennon argumenttien "{}" esiintymät korvataan syöttöelementillä, joka on välitetty putkioperaation kautta. Näin voit sijoittaa syöttöelementit tiettyihin asemiin komennon argumentteille, jotka on suoritettava (toistuvasti).