De opdracht xargs wordt meestal gebruikt in een opdrachtregel waarbij de uitvoer van één opdracht wordt doorgegeven als invoerargumenten voor een andere opdracht.
In veel gevallen is hiervoor geen speciale opdracht zoals xargs nodig, omdat de operators "pipe" en "redirection" dezelfde type transactie uitvoeren. Soms zijn er echter problemen met het elementaire piping- en omleidingsmechanisme, bijvoorbeeld als argumenten spaties bevatten, die xargs overwinnen.
Bovendien voert xargs het opgegeven commando herhaaldelijk uit, indien nodig, om alle argumenten die eraan zijn gegeven te verwerken. In feite kunt u opgeven hoeveel argumenten van de standaardinvoerstroom moeten worden gelezen telkens wanneer de xargs de opgegeven opdracht uitvoert.
Over het algemeen moet de opdracht xargs worden gebruikt als de uitvoer van één opdracht moet worden gebruikt als onderdeel van de opties of argumenten van een tweede opdracht waarnaar de gegevens worden gestreamd (met behulp van de pipe-operator "|"). Normale piping is voldoende als de gegevens bedoeld zijn als de (standaard) ingang van de tweede opdracht.
Als u bijvoorbeeld de opdracht ls gebruikt om een lijst met bestandsnamen en directory's te genereren en deze lijst vervolgens in de xargs-opdracht uitvoert die de echo uitvoert, kunt u opgeven hoeveel bestandsnamen of mapnamen als volgt via echo op elke iteratie worden verwerkt :
ls | xargs -n 5 echo
In dit geval ontvangt echo per keer vijf bestands- of mapnamen. Omdat echo aan het einde een nieuw-regelteken toevoegt, worden op elke regel vijf namen geschreven.
Als u een opdracht uitvoert die grote en onvoorspelbare nummeritems (bijvoorbeeld bestandsnamen) retourneert die worden doorgegeven aan een andere opdracht voor verdere verwerking, is het een goed idee om het maximumaantal argumenten dat tweede opdracht ontvangt te beheren om overbelasting en crashen te voorkomen.
De volgende opdrachtregel verdeelt de stroom van bestandsnamen die is voortgebracht door de groepen van 200 te vinden voordat ze worden doorgegeven aan de opdracht cp, die ze kopieert naar de backup directory.
zoek naar ./ -type f -name "* .txt" -print | xargs -l200 -i cp-f {} ./backup
Het element "./" in de opdracht find geeft de huidige directory aan voor zoeken. Het argument "-type f" beperkt het zoeken naar bestanden en de vlag "-name" * .txt "filtert verder alles uit dat geen" .txt "-extensie heeft. -ik vlag in xargs signalen dat de {} notatie vertegenwoordigt elke bestandsnaam van de stoom.
Met de volgende opdracht worden bestanden met de naam core in of onder de map / tmp gevonden en verwijderd.
find / tmp -name core -type f -print | xargs / bin / rm -f
Merk op dat dit onjuist zal werken als er bestandsnamen zijn met nieuwe regels, enkele of dubbele aanhalingstekens of spaties. De volgende versie verwerkt de bestandsnamen op zo'n manier dat bestands- of mapnamen met enkele of dubbele aanhalingstekens, spaties of nieuwe regels correct worden afgehandeld.
find / tmp -name core -type f -print0 | xargs -0 / bin / rm -f
In plaats van de -ik optie kunt u ook de -IK vlag die de tekenreeks opgeeft die wordt vervangen door de invoerregel in de opdrachtargumenten zoals in dit voorbeeld:
ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>
De vervangende tekenreeks wordt gedefinieerd als "{}". Dit betekent dat alle voorkomens van "{}" in de opdrachtargumenten worden vervangen door het invoerelement dat wordt doorgestuurd om door de pipe-bewerking te arggen. Hiermee kunt u de invoerelementen op specifieke posities plaatsen in de argumenten van de opdracht die (herhaaldelijk) moet worden uitgevoerd.




