Kommandot xargs används vanligtvis i en kommandorad där utmatningen av ett kommando vidarebefordras som inmatningsargument till ett annat kommando.
I många fall behövs inget speciellt kommando som xargs för att åstadkomma det, eftersom operatörerna "rör" och "omdirigering" utför samma typ av transaktion. Ibland finns emellertid problem med den grundläggande rörlednings- och omriktningsmekanismen, t ex om argument innehåller mellanslag, som xargs övervinner.
Dessutom utför xargs det angivna kommandot upprepade gånger, om det behövs, för att behandla alla argument som ges till den. Faktum är att du kan ange hur många argument som ska läsas av standardinmatningsströmmen varje gång xargs kör det angivna kommandot.
Generellt bör kommandot xargs användas om utgången av ett kommando ska användas som en del av alternativen eller argumenten för ett andra kommando till vilket data streamas (med röroperatören "|"). Regelbunden rörledning är tillräcklig om data är avsedda att vara (standard) ingången för det andra kommandot.
Om du till exempel använder kommandot ls för att generera en lista med filnamn och kataloger och sedan röra den här listan i xargs-kommandot som kör eko, kan du ange hur många filnamn eller katalognamn som behandlas med eko på varje iteration enligt följande :
ls | xargs -n 5 echo
I det här fallet får echo fem fil- eller katalognamn åt gången. Eftersom echo lägger till en ny linje i slutet, skrivs fem namn på varje rad.
Om du utför ett kommando som returnerar ett stort och oförutsägbart antal objekt (t ex filnamn) som vidarebefordras till ett annat kommando för vidare bearbetning är det en bra idé att kontrollera det maximala antalet argument som andra kommandot tar emot för att undvika överbelastning och krasch.
Följande kommandorad partitionerar strömmen av filnamn som produceras genom att hitta grupperna 200 innan de skickas vidare till cp-kommandot, vilket kopierar dem till säkerhetskopiering katalogen.
hitta ./-typ f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup
"./" -elementet i sökkommandot anger den aktuella katalogen för sökning. Argumentet "-typ f" begränsar sökningen till filer, och "-name" * .txt "-flaggan filtrerar vidare ut något som inte har en" .txt "-tillägg. -jag flagga i xargs signalerar att {} Notation representerar varje filnamn på ångan.
Följande kommando hittar filer som heter kärna i eller under katalogen / tmp och raderar dem.
hitta / tmp -name core -type f -print | xargs / bin / rm -f
Observera att detta kommer att fungera felaktigt om det finns några filnamn som innehåller nya linjer, enkla eller dubbla citat eller mellanslag. Följande version behandlar filnamnen på ett sådant sätt att fil eller katalognamn som innehåller enkla eller dubbla citat, mellanslag eller nya linjer hanteras korrekt.
hitta / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
Istället för -jag alternativet kan du också använda -JAG flagga som anger strängen som den ersätts av inmatningsraden i kommandog argumenten som i det här exemplet:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
Ersättningssträngen definieras som "{}". Det betyder att eventuella händelser av "{}" i kommandorammen ersätts av inmatningselementet som vidarebefordras till args genom röroperationen. Detta gör att du kan placera inmatningselementen på specifika positioner i kommandotets argument som ska utföras (upprepade gånger).