Android

Xargs-opdracht in Linux

Simple and straightforward tutorial on xargs!

Simple and straightforward tutorial on xargs!

Inhoudsopgave:

Anonim

Met het hulpprogramma xargs kunt u opdrachten bouwen en uitvoeren vanaf standaardinvoer. Het wordt meestal gebruikt in combinatie met andere opdrachten via leidingen.

Met xargs kunt u standaardinvoer leveren als argument voor opdrachtregelprogramma's zoals mkdir en rm .

In deze tutorial behandelen we de basisprincipes van het gebruik van de opdracht xargs .

Hoe Linux xargs Command te gebruiken

xargs leest argumenten van de standaardinvoer, gescheiden door lege spaties of nieuwe regels, en voert de opgegeven opdracht uit met de invoer als argumenten van de opdracht. Als er geen opdracht wordt gegeven, is standaard /bin/echo .

De syntaxis voor de opdracht xargs is als volgt:

xargs]

Het meest eenvoudige voorbeeld van het gebruik van xargs zou zijn om meerdere tekenreeksen gescheiden door witruimte met een pipe door te xargs aan xargs en een opdracht uit te voeren die deze tekenreeksen als argumenten gebruikt.

echo "file1 file2 file3" | xargs touch

In het bovenstaande voorbeeld voeren we de standaardinvoer door naar xargs en wordt de touch uitgevoerd voor elk argument, waardoor drie bestanden worden gemaakt. Dit is hetzelfde als wanneer je zou rennen:

touch file1 file2 file3

Hoe de opdracht te bekijken en de gebruiker te vragen

Om de opdracht op de terminal af te drukken voordat deze wordt uitgevoerd, gebruikt u de optie -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Typ y of Y om te bevestigen en voer de opdracht uit:

touch file1 file2 file3 ?…y

Deze optie is handig bij het uitvoeren van destructieve opdrachten.

Hoe het aantal argumenten te beperken

Standaard wordt het aantal argumenten dat aan de opdracht wordt doorgegeven, bepaald door de limiet van het systeem.

De optie -n ( --max-args ) geeft het aantal argumenten aan dat aan de gegeven opdracht moet worden doorgegeven. xargs voert de opgegeven opdracht zo vaak als nodig uit totdat alle argumenten zijn uitgeput.

In het volgende voorbeeld is het aantal argumenten dat wordt gelezen uit de standaardinvoer beperkt tot 1.

echo "file1 file2 file3" | xargs -n 1 -t touch

Zoals u kunt zien in de uitgebreide uitvoer hieronder, wordt de aanraakopdracht voor elk argument afzonderlijk uitgevoerd:

touch file1 touch file2 touch file3

Meerdere opdrachten uitvoeren

Gebruik de optie -I om meerdere opdrachten met xargs te voeren. Het werkt door een replace-str definiëren na de optie -I en alle exemplaren van de replace-str worden vervangen door het argument dat wordt doorgegeven aan xargs.

In het volgende xargs voorbeeld worden twee opdrachten uitgevoerd, eerst worden de bestanden met touch en vervolgens worden de bestanden met de opdracht ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Een veel voorkomende keuze voor replace-str is % . U kunt echter een andere tijdelijke aanduiding gebruiken, bijvoorbeeld ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Een scheidingsteken opgeven

Gebruik de optie -d ( --delimiter ) om een ​​aangepast scheidingsteken in te stellen. Dit kan een enkel teken zijn of een escape-reeks die begint met \ .

Het volgende voorbeeld gebruiken we ; als een scheidingsteken:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Hoe items uit bestand te lezen

De opdracht xargs kan ook items uit een bestand lezen in plaats van standaardinvoer. Gebruik hiervoor de optie -a ( --arg-file ) gevolgd door de bestandsnaam.

In het volgende voorbeeld zal de xargs opdracht het bestand ips.txt lezen en elk IP-adres pingen.

ips.txt

8.8.8.8 1.1.1.1

We gebruiken ook de optie -L 1 , die xargs opdracht xargs om één regel per keer te lezen. Als deze optie wordt weggelaten, geeft xargs alle IP's door aan een enkele ping opdracht.

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

xargs met find

xargs wordt meestal gebruikt in combinatie met de opdracht find . U kunt zoeken gebruiken find naar specifieke bestanden te zoeken en vervolgens xargs gebruiken om bewerkingen op die bestanden uit te voeren.

Om problemen met bestandsnamen die nieuwe regels of andere speciale tekens bevatten te voorkomen, gebruikt u -print0 optie find -print0 , waardoor find de volledige bestandsnaam, gevolgd door een null-teken, afdrukt. Deze uitvoer kan correct worden geïnterpreteerd door xargs met de optie -0 , ( --null ).

In het volgende voorbeeld drukt find de volledige namen af ​​van alle bestanden in de map xargs en geeft xargs de bestandspaden door aan de opdracht rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Xargs gebruiken om witruimte-tekens bij te snijden

xargs kan ook worden gebruikt als een hulpmiddel om witruimte aan beide zijden van een bepaalde tekenreeks te verwijderen. xargs de string naar het xargs commando en hij zal het bijsnijden:

echo " Long line " | xargs

Long line

Dit kan handig zijn bij het vergelijken van strings in shellscripts.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Conclusie

xargs is een opdrachtregelhulpprogramma op Linux waarmee u opdrachten kunt bouwen en uitvoeren.

Voor meer gedetailleerde informatie over elke xargs optie, lees de xargs man-pagina.

xargs terminal