Utfør flere operasjoner i Linux med kommandoen 'xargs'
Xargs
er en nyttig kommando som fungerer som en bro mellom to kommandoer, leser utgang av en og utfører den andre med elementene som leses. Kommandoen brukes mest i scenarier når en bruker søker etter et mønster, fjerner og omdøper filer, og mer.
I sin grunnleggende form leser xargs
informasjon fra standardinngangen (eller STDIN) og utfører en kommando en eller flere ganger med elementene som leses.
Som en illustrasjon, forventer følgende xargs
kommandoen at brukeren skal skrive inn en fil eller et katalognavn:
xargs ls -l
Når et navn er oppgitt, sender kommandoen xargs den informasjonen til ls
kommandoen.
Her er resultatet av kommandoen ovenfor vist xargs
når jeg kjørte det fra min hjemmekatalog ved å skrive inn "Dokumenter" (som er en underkatalog i Hjem-mappen) som en inngang:
Vær oppmerksom på at i dette tilfellet xargs
kommandoen xargs
kommandoen ls
med katalognavnet som et kommandolinjeprøving for å lage en liste over filer som er tilstede i den katalogen.
Mens kommandoen xargs
kan brukes i ulike kommandolinjevirkninger, kommer den veldig praktisk når den brukes med xargs
. I denne artikkelen vil vi diskutere noen nyttige eksempler for å forstå hvordan xargs
og find
kan brukes sammen.
Operasjoner som involverer flere filer
Anta at du vil kopiere innholdet til "ref.txt" til alle .txt-filer som er til stede i en katalog. Mens oppgaven ellers krever at du skal utføre flere kommandoer, xargs
kommandoen xargs
, sammen med find
kommandoen, det enkelt.
Bare kjør følgende kommando:
finn ./-navn "* .txt" | xargs -n1 cp ../ref.txt
For å forstå kommandoen ovenfor, la oss dele den i to deler.
Den første delen er find ./ -name "*.txt"
, som søker etter alle .txt-filene som er tilstede i den nåværende katalogen.
Den andre delen xargs -n1 cp ../ref.txt
vil ta tak i utgangen av den første kommandoen (de resulterende filnavnene) og overlevere den til cp
(copy) kommandoen en etter en. Merk at -n
alternativet er avgjørende her, da det instruerer xargs
å bruke ett argument per utførelse.
Når kombinert sammen, vil hele kommandoen kopiere innholdet av "ref.txt" til alle .txt-filer i katalogen.
Operasjoner som involverer et stort antall argumenter
En av de største fordelene ved å bruke xargs
er dens evne til å håndtere et stort antall argumenter. For eksempel, mens du sletter et stort antall filer på en gang, kan kommandoen rm
noen ganger mislykkes med en " Argument List too long " -feil. Det er fordi det ikke bare kunne håndtere en så lang liste over argumenter. Dette er vanligvis tilfelle når du har for mange filer i mappen du vil slette.
Dette kan enkelt løses med xargs
. For å slette alle disse filene, bruk følgende kommando:
finn ./rm-test/ -name "*" -print | xargs rm
Operasjoner som involverer mønstersøk
Programvareutviklere så vel som systemadministratorer gjør mye mønstersøk mens de jobber på kommandolinjen. For eksempel kan en utvikler se på prosjektfilene som endrer en bestemt variabel, eller en systemadministrator vil kanskje se filene som bruker en bestemt systemkonfigurasjonsparameter. I disse scenariene gjør xargs
, sammen med find
og grep
, ting enkelt for deg.
For eksempel å søke etter alle .txt-filer som inneholder "maketecheasier" -strengen, kjør følgende kommando:
$ find ./ -name "* .txt" | xargs grep "maketecheasier"
Her er resultatet kommandoen produsert på systemet mitt:
Skjære / kopiere operasjoner
Xargs
, sammen med find
kommandoen, kan også brukes til å kopiere eller flytte et sett med filer fra en katalog til en annen. Hvis du for eksempel vil flytte alle tekstfiler som er over 10 minutter gamle fra gjeldende katalog til forrige katalog, bruker du følgende kommando:
finn. -name "* .txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../
Alternativet -I
kommandolinje brukes av xargs
kommandoen til å definere en erstatningsstreng som blir erstattet med navn som leses fra utgangen av xargs
. Her er erstatningsstrengen {}, men det kan være noe. For eksempel kan du bruke "fil" som erstatningsstreng.
finn. -name "* .txt" -mmin 10 | xargs -n1 -I 'fil' mv 'fil' ./practice
Hvordan fortelle xargs når du skal slutte
Anta at du vil liste opp detaljene for alle .txt-filene som er tilstede i den nåværende katalogen. Som allerede forklart, kan det enkelt gjøres ved å bruke følgende kommando:
finn. -name "* .txt" | xargs ls -l
Men det er ett problem; xargs
kommandoen vil utføre kommandoen ls
selv om xargs
ikke finner noen .txt-fil. Her er et eksempel:
Så du kan se at det er nei. txt- filer i katalogen, men det stoppet ikke xargs
fra å utføre kommandoen ls
. For å endre denne oppførselen, bruk kommandolinjen -r
:
finn. -name "* .txt" | xargs -r ls -l
Konklusjon
Selv om jeg har konsentrert meg her om å bruke xargs
med find
, kan den også brukes sammen med mange andre kommandoer. Gå gjennom kommandos hovedside for å lære mer om det, og legg igjen en kommentar nedenfor hvis du har tvil / spørre.