Android

Xargs-kommando i Linux

Simple and straightforward tutorial on xargs!

Simple and straightforward tutorial on xargs!

Innholdsfortegnelse:

Anonim

Med xargs verktøyet kan du bygge og utføre kommandoer fra standardinngang. Det brukes vanligvis i kombinasjon med andre kommandoer gjennom rørføring.

Med xargs kan du gi standardinngang som argument til kommandolinjeværktøy som mkdir og rm .

I denne opplæringen skal vi dekke det grunnleggende om bruk av xargs kommandoen.

Hvordan bruke Linux xargs Command

xargs leser argumenter fra standardinndata, atskilt med blanke mellomrom eller nylinjer, og utfører den spesifiserte kommandoen ved å bruke inngangen som kommandans argumenter. Hvis ingen kommando er gitt, er standard /bin/echo .

Syntaks for xargs kommandoen er som følger:

xargs]

Det mest grunnleggende eksemplet på å bruke xargs ville være å passere flere strenger atskilt med hvite mellomrom ved hjelp av et rør til xargs og kjøre en kommando som vil bruke disse strengene som argumenter.

echo "file1 file2 file3" | xargs touch

I eksemplet over xargs vi standardinngangen til xargs , og touch kommandoen kjøres for hvert argument, og lager tre filer. Dette er det samme som om du ville løpt:

touch file1 file2 file3

Slik viser du kommandoen og spør brukeren

For å skrive ut kommandoen på terminalen før du kjører den bruker du -t ( --verbose ) -alternativet:

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Skriv y eller Y å bekrefte og kjør kommandoen:

touch file1 file2 file3 ?…y

Dette alternativet er nyttig når du utfører ødeleggende kommandoer.

Slik begrenser du antall argumenter

Som standard bestemmes antall argumenter som sendes til kommandoen av systemets grense.

Alternativet -n ( --max-args ) spesifiserer antall argumenter som skal sendes til den gitte kommandoen. xargs kjører den spesifiserte kommandoen så mange ganger som nødvendig til alle argumenter er utmattet.

I det følgende eksemplet er antall argumenter som leses fra standardinngangen, begrenset til 1.

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

Som du kan se fra verbose-utdataene nedenfor, blir touch-kommandoen utført separat for hvert argument:

touch file1 touch file2 touch file3

Slik kjører du flere kommandoer

Hvis du vil kjøre flere kommandoer med xargs , bruker du -I alternativet. Det fungerer ved å definere en replace-str etter alternativet -I , og alle forekomster av replace-str erstattes med argumentet som er sendt til xargs.

Følgende xargs eksempel kjører to kommandoer, først oppretter de filene ved hjelp av touch , og deretter viser de filene med ls kommandoen:

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

Et vanlig valg for replace-str er % . Du kan imidlertid bruke en annen plassholder, for eksempel ARGS :

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

Hvordan spesifisere en avgrenser

Bruk alternativet -d ( --delimiter ) for å angi en egendefinert avgrensning, som enten kan være et enkelt tegn eller en fluksekvens som starter med \ .

Følgende eksempel bruker vi ; som en avgrenser:

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

touch file1 file2 file3

Slik leser du elementer fra fil

Kommandoen xargs kan også lese elementer fra en fil i stedet for standardinndata. For å gjøre dette, bruk alternativet -a ( --arg-file ) etterfulgt av filnavnet.

I eksemplet xargs vil xargs kommandoen lese ips.txt filen og pinge hver IP-adresse.

ips.txt

8.8.8.8 1.1.1.1

Vi bruker også -L 1 alternativet, som instruerer xargs å lese en linje om gangen. Hvis dette alternativet er utelatt, vil xargs overføre alle IP-er til en enkelt ping kommando.

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

Bruke xargs med find

xargs brukes ofte i kombinasjon med xargs . Du kan bruke find til å søke etter spesifikke filer og deretter bruke xargs til å utføre operasjoner på disse filene.

For å unngå problemer med filnavn som inneholder nylinjer eller andre spesialtegn, bruker du alltid alternativet finn -print0 , som får find til å skrive ut hele filnavnet etterfulgt av et nulltegn. Denne utgangen kan tolkes korrekt av xargs ved å bruke alternativet -0 , (- --null ).

I eksemplet xargs vil find skrive ut alle navnene på alle filene i katalogen /var/www/.cache og xargs vil sende filstiene til kommandoen rm :

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

Bruke xargs for å trimme Whitespace-tegn

xargs kan også brukes som et verktøy for å fjerne mellomrom fra begge sider av en gitt streng. Bare rør strengen til kommandoen xargs , så gjør den trimmingen:

echo " Long line " | xargs

Long line

Dette kan være nyttig når du sammenligner strenger i skallskript.

#!/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.

Konklusjon

xargs er et kommandolinjeverktøy på Linux som lar deg bygge og utføre kommandoer.

For mer detaljert informasjon om hvert xargs alternativ, les xargs man-siden.

xargs terminal