Android

Xargs-kommando i linux

Linux Tutorial Teil 4 - erstes praktisches Bash-Script

Linux Tutorial Teil 4 - erstes praktisches Bash-Script

Indholdsfortegnelse:

Anonim

xargs værktøjet giver dig mulighed for at opbygge og udføre kommandoer fra standardinput. Det bruges normalt i kombination med andre kommandoer gennem rørsystemer.

Med xargs kan du levere standardinput som argument til kommandolinjeværktøjer som mkdir og rm .

I denne tutorial dækker vi det grundlæggende ved brug af xargs kommandoen.

Sådan bruges Linux xargs kommando

xargs læser argumenter fra standardindgangen, adskilt af blanke mellemrum eller nylinjer og udfører den specificerede kommando ved hjælp af input som kommandos argumenter. Hvis der ikke findes nogen kommando, er standard /bin/echo .

Syntaks for kommandoen xargs er som følger:

xargs]

Det mest basale eksempel på at bruge xargs ville være at passere flere strenge adskilt med hvidafstand ved hjælp af et rør til xargs og køre en kommando, der vil bruge disse strenge som argumenter.

echo "file1 file2 file3" | xargs touch

I eksemplet ovenfor xargs vi standardindgangen til xargs , og touch kommandoen køres for hvert argument og skaber tre filer. Dette er det samme som hvis du ville køre:

touch file1 file2 file3

Sådan vises kommandoen og spørg brugeren

For at udskrive kommandoen på terminalen, før den udføres, skal du bruge indstillingen -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Skriv y eller Y at bekræfte og køre kommandoen:

touch file1 file2 file3 ?…y

Denne indstilling er nyttig, når du udfører destruktive kommandoer.

Sådan begrænses antallet af argumenter

Som standard bestemmes antallet af argumenter, der sendes til kommandoen, af systemets grænse.

Indstillingen -n ( --max-args ) specificerer antallet af argumenter, der skal overføres til den givne kommando. xargs kører den angivne kommando så mange gange som nødvendigt, indtil alle argumenter er opbrugt.

I det følgende eksempel er antallet af argumenter, der læses fra standardindgangen, begrænset til 1.

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

Som du kan se fra den verbose output nedenfor, udføres touch-kommandoen separat for hvert argument:

touch file1 touch file2 touch file3

Sådan køres flere kommandoer

Hvis du vil køre flere kommandoer med xargs , skal du bruge indstillingen -I . Det fungerer ved at definere en replace-str efter indstillingen -I , og alle forekomster af replace-str erstattes med argumentet, der er sendt til xargs.

Følgende xargs eksempel kører to kommandoer, først opretter de filerne ved hjælp af touch , og derefter viser det filerne med kommandoen 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

Et almindeligt valg for replace-str er % . Du kan dog bruge en anden pladsholder, for eksempel ARGS :

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

Sådan specificeres en afgrænser

Brug indstillingen -d ( --delimiter ) til at indstille en brugerdefineret afgrænsning, der enten kan være et enkelt tegn eller en flugt-sekvens, der starter med \ .

Følgende eksempel bruger vi ; som afgrænser:

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

touch file1 file2 file3

Sådan læses varer fra fil

Kommandoen xargs kan også læse emner fra en fil i stedet for standardindtastning. Det gør du ved at bruge indstillingen -a ( --arg-file ) efterfulgt af filnavnet.

I det følgende eksempel vil xargs kommandoen læse ips.txt filen og pinge hver IP-adresse.

ips.txt

8.8.8.8 1.1.1.1

Vi bruger også indstillingen -L 1 , der instruerer xargs at læse en linje ad gangen. Hvis denne mulighed er udeladt, vil xargs videresende 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

Brug af xargs med find

xargs bruges ofte i kombination med find kommandoen. Du kan bruge find til at søge efter specifikke filer og derefter bruge xargs til at udføre handlinger på disse filer.

For at undgå problemer med filnavne, der indeholder nye linjer eller andre specialtegn, skal du altid bruge funktionen find -print0 , der får find til at udskrive det fulde filnavn efterfulgt af et nulltegn. Dette output kan tolkes korrekt af xargs ved hjælp af indstillingen -0 , (- --null ).

I det følgende eksempel udskriver find de fulde navne på alle filer inde i /var/www/.cache og xargs videregiver filstierne til kommandoen rm :

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

Brug af xargs til at trimme Whitespace-tegn

xargs kan også bruges som et værktøj til at fjerne mellemrum fra begge sider af en given streng. Rør blot strengen til xargs kommandoen, så gør den trimning:

echo " Long line " | xargs

Long line

Dette kan være nyttigt, når man sammenligner strenge i shell-scripts.

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

Konklusion

xargs er et kommandolinjeværktøj på Linux, der giver dig mulighed for at opbygge og udføre kommandoer.

For mere detaljeret information om hver xargs indstilling skal du læse siden xargs-man.

xargs terminal