Startpagina > Omgeving & hulpmiddelen > xargs

xargs: Bouw en voer opdrachtregels uit vanaf standaardinvoer

Het xargs-commando leest items van standaardinvoer (stdin) en gebruikt deze om argumentlijsten voor andere commando's samen te stellen en uit te voeren. Dit is erg handig voor het automatiseren van complexe taken, zoals het omzetten van meerdere regels invoer die via een pipe (|) worden doorgegeven naar argumenten voor een enkel commando, of het beperken van het aantal argumenten dat tegelijkertijd kan worden verwerkt.

Overzicht

xargs leest gegevens van standaardinvoer, interpreteert deze als argumenten gescheiden door spaties of nieuwe regels, en voert vervolgens het opgegeven commando uit met deze argumenten. Het is bijzonder krachtig wanneer het wordt gebruikt in combinatie met het find-commando om batchbewerkingen op bestandslijsten uit te voeren.

Belangrijkste functies

  • Converteert standaardinvoergegevens naar commando-argumenten
  • Beperkt het aantal argumenten bij het uitvoeren van commando's
  • Ondersteunt parallelle verwerking
  • Verwerkt bestandsnamen met speciale tekens veilig

Belangrijkste opties

De belangrijkste opties van het xargs-commando worden gebruikt om de manier waarop invoer wordt verwerkt, de controle over de uitvoering van commando's en de uitvoerindeling in te stellen.

Invoer verwerking

Uitvoeringscontrole

Gegenereerde opdracht:

Probeer de opdrachtcombinaties.

Uitleg:

`xargs` Voer het commando uit.

Combineer deze opties en voer de opdracht virtueel uit met de AI.

Gebruiksvoorbeelden

xargs kan flexibel worden gebruikt in verschillende scenario's. Hier zijn enkele veelvoorkomende gebruiksvoorbeelden.

Basisgebruik: Meerdere bestanden verwijderen

echo "file1.txt file2.txt" | xargs rm

Verwijder bestandsnamen die via standaardinvoer worden ontvangen door ze door te geven als argumenten aan het rm-commando.

Veilig bestanden verwijderen met find

find . -name "*.bak" -print0 | xargs -0 rm

Verwijder bestanden veilig, zelfs als bestandsnamen spaties of speciale tekens bevatten, door find -print0 en xargs -0 te gebruiken.

Commando uitvoeren voor elk bestand (vervangende tekenreeks)

find . -name "*.log" | xargs -I {} mv {} {}.old

Wijzig de extensie van elk gevonden .log-bestand naar .old door het mv-commando uit te voeren met de vervangende tekenreeks.

Parallel SSH-verbindingen maken met meerdere hosts

cat hostnames.txt | xargs -P 5 -I {} ssh {} "uptime"

Probeer tegelijkertijd 5 SSH-verbindingen te maken met elke host in het bestand hostnames.txt om de uptime te controleren.

Bevestigingsprompt voor uitvoering

ls *.tmp | xargs -p rm

Vraag om bevestiging voor het verwijderen van elk .tmp-bestand in de huidige map voordat de verwijdering wordt uitgevoerd.

Tips & Aandachtspunten

Tips en aandachtspunten voor het effectief gebruiken van xargs.

Veilige verwerking van bestandsnamen

Omdat bestandsnamen spaties, tabs, nieuwe regels en aanhalingstekens kunnen bevatten, moet u altijd de combinatie `find ... -print0 | xargs -0 ...` gebruiken bij het werken met het find-commando. Dit voorkomt problemen door items te scheiden met null-karakters.

  • Gebruik altijd `find -print0` samen met `xargs -0`
  • Standaard worden items gescheiden door spaties, wat problemen kan veroorzaken als bestandsnamen spaties bevatten

Voorzichtigheid bij het uitvoeren van risicovolle commando's

Wees zeer voorzichtig bij het gebruik van xargs met commando's die systeemwijzigingen aanbrengen, zoals rm, mv, chown. Het is raadzaam om de `-p` optie te gebruiken om elke uitvoering te bevestigen, of de `-t` optie om de uit te voeren commando's vooraf te bekijken.

  • Gebruik de `-p` (prompt) optie voor bevestiging voor uitvoering
  • Gebruik de `-t` (trace) optie om de uit te voeren commando's te bekijken
  • Test eerst met `echo` om te controleren of het naar verwachting werkt

xargs versus for-lus

Voor eenvoudige taken kan een for-lus in de shell intuïtiever zijn, maar voor een zeer groot aantal bestanden/items om te verwerken, wanneer parallelle verwerking nodig is, of wanneer de limiet van de opdrachtregel wordt overschreden, is xargs een efficiënter en krachtiger alternatief.

  • Verwerking van grote hoeveelheden bestanden: `xargs` is geheugenefficiënter
  • Parallelle verwerking: `xargs -P`
  • Limiet van de opdrachtregel: `xargs` verdeelt automatisch

Hétzelfde categoriecommando