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.