Xargs-kommandoen brukes vanligvis i en kommandolinje der utgangen av en kommando blir sendt videre som inngangsargumenter til en annen kommando.
I mange tilfeller er det ikke nødvendig med spesielle kommandoer som xargs for å oppnå dette, siden "pipe" og "redirection" -operatørene utfører samme type transaksjon. Imidlertid er det noen ganger problemer med den grunnleggende rør- og omdirigeringsmekanismen, for eksempel hvis argumenter inneholder mellomrom, som xargene overvinne.
I tillegg kjører xargs den angitte kommandoen gjentatte ganger, om nødvendig, for å behandle alle argumentene som er gitt til den. Faktisk kan du angi hvor mange argumenter som skal leses av standardinngangsstrøm hver gang xargene kjører den angitte kommandoen.
Generelt bør kommandoen xargs brukes hvis utgangen av en kommando skal brukes som en del av alternativene eller argumentene til en annen kommando som dataene blir streamet til (ved hjelp av røroperatøren "|"). Regelmessig rørledning er tilstrekkelig dersom dataene skal være (standard) inngangen til den andre kommandoen.
Hvis du for eksempel bruker kommandoen ls til å generere en liste over filnavn og kataloger, og deretter rør denne listen inn i xargs-kommandoen som utfører ekko, kan du angi hvor mange filnavn eller katalognavn som behandles ved ekko på hver iterasjon som følger :
ls | xargs -n 5 echo
I dette tilfellet mottar ekko fem fil- eller katalognavn om gangen. Siden ekko legger til en ny linje på slutten, skrives fem navn på hver linje.
Hvis du utfører en kommando som returnerer et stort og uforutsigbart antall elementer (for eksempel filnavn) som sendes videre til en annen kommando for videre behandling, er det en god ide å kontrollere det maksimale antallet argumenter som den andre kommandoen mottar for å unngå overbelastning og krasj.
Følgende kommandolinje partisjonerer strømmen av filnavn produsert ved å finne gruppene på 200 før de overføres til cp-kommandoen, som kopierer dem til backup katalogen.
finn ./ -type f -name "* .txt" -print | xargs -200 - i cp -f {} ./backup
"./" -elementet i finnkommandoen angir gjeldende katalog for søking. "Type-f" -argumentet begrenser søket til filer, og "-name" * .txt "-flagget filtrerer ytterligere ut noe som ikke har en" .txt "-utvidelse. -Jeg flagg i xargs signaler at {} notasjon representerer hvert filnavn på dampen.
Følgende kommando finner filer kalt kjerne i eller under katalogen / tmp og sletter dem.
finn / tmp -name core -type f -print | xargs / bin / rm -f
Vær oppmerksom på at dette vil fungere feil hvis det finnes noen filnavn som inneholder nybegynner, enkelt eller dobbelt anførselstegn eller mellomrom. Følgende versjon behandler filnavnene på en slik måte at fil- eller katalognavn som inneholder enkle eller doble anførselstegn, mellomrom eller nye linjer, håndteres riktig.
finn / tmp-name core -type f -print0 | xargs -0 / bin / rm -f
I stedet for -Jeg alternativet kan du også bruke -JEG flagg som spesifiserer strengen som den er erstattet av inntastingslinjen i kommandobaramene som i dette eksempelet:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
Erstatningstrengen er definert som "{}". Dette betyr at eventuelle forekomster av "{}" i kommandoparametrene er erstattet av inngangselementet videresendt til args gjennom røroperasjonen. Dette gjør at du kan legge inn elementene på bestemte posisjoner i argumentene for kommandoen som skal gjentas (gjentatte ganger).