Xargs er en nyttig kommando, der fungerer som en bro mellem to kommandoer, læser output af en og udfører den anden med de læste artikler. Kommandoen bruges mest i scenarier, når en bruger søger efter et mønster, fjerner og omdøber filer og mere.

I sin grundlæggende form læser xargs oplysninger fra standardindgangen (eller STDIN) og udfører en kommando en eller flere gange med de objekter, der læses.

Som en illustration forventer den følgende xargs kommando, at brugeren skal indtaste en fil eller et katalognavn:

 xargs ls -l 

Når et navn er indtastet, overfører kommandoen xargs denne information til kommandoen ls .

Her er resultatet af ovenstående viste xargs kommando, da jeg eksekverede det fra min hjemmekatalog ved at indtaste "Dokumenter" (som er en underkatalog i min Hjemmemappe) som input:

Vær opmærksom på, at xargs kommandoen i dette tilfælde udførte ls kommandoen med mappenavnet som et kommandolinjeprincip for at frembringe en liste over filer, der er til stede i den pågældende mappe.

Mens kommandoen xargs kan bruges i forskellige kommandolinjevirkninger, kommer den til at være meget praktisk, når den bruges med find kommandoen. I denne artikel vil vi diskutere nogle nyttige eksempler for at forstå, hvordan xargs og find kan bruges sammen.

Operationer der involverer flere filer

Antag at du vil kopiere indholdet af "ref.txt" til alle .txt-filer, der findes i en mappe. Mens opgaven ellers kræver, at du udfører flere kommandoer, gør kommandoen xargs sammen med find kommandoen det nemt.

Bare kør følgende kommando:

 find ./ -name "* .txt" | xargs -n1 cp ../ref.txt 

For at forstå kommandoen vist ovenfor, lad os opdele det i to dele.

Den første del find ./ -name "*.txt", som søger efter alle de .txt-filer, der findes i den aktuelle mappe.

Den anden del xargs -n1 cp ../ref.txt fat i udgangen af ​​den første kommando (de resulterende filnavne) og overfører den til cp (copy) kommandoen en efter en. Bemærk, at -n indstillingen er afgørende her, da den instruerer xargs til at bruge et argument pr. Eksekvering.

Når de kombineres sammen, kopierer hele kommandoen indholdet af "ref.txt" til alle .txt-filer i mappen.

Operationer der involverer et stort antal argumenter

En af de store fordele ved at bruge xargs er dens evne til at håndtere et stort antal argumenter. For eksempel, når du sletter et stort antal filer på én gang, vil kommandoen rm undertiden svigte med en " Argument liste for lang " fejl. Det skyldes, at det ikke bare kunne håndtere en så lang liste over argumenter. Dette er normalt tilfældet, når du har for mange filer i den mappe, du vil slette.

Dette kan nemt løses med xargs . For at slette alle disse filer skal du bruge følgende kommando:

 find ./rm-test/name "*" -print | xargs rm 

Operationer med mønstersøgning

Softwareudviklere samt systemadministratorer gør meget mønstersøgning, mens de arbejder på kommandolinjen. For eksempel kan en udvikler hurtigt se på projektfilerne, der ændrer en bestemt variabel, eller en systemadministrator vil måske se filerne, der bruger en bestemt systemkonfigurationsparameter. I disse scenarier gør xargs sammen med find og grep det nemt for dig.

For at søge efter alle .txt-filer, der indeholder "maketecheasier" -strengen, skal du køre følgende kommando:

 $ find ./ -name "* .txt" | xargs grep "maketecheasier" 

Her er output kommandoen produceret på mit system:

Udskæring / kopiering

Xargs, sammen med find kommandoen, kan også bruges til at kopiere eller flytte et sæt filer fra en mappe til en anden. Hvis du f.eks. Skal flytte alle tekstfiler, der er mere end 10 minutter gamle fra den aktuelle mappe til den forrige mappe, skal du bruge følgende kommando:

 Find . -name "* .txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../ 

Alternativet -I kommandolinje bruges af kommandoen xargs til at definere en erstatningsstreng, der erstattes med navne, der læses fra output fra find kommandoen. Her er erstatningsstrengen {}, men det kan være noget. For eksempel kan du bruge "fil" som en erstatningsstreng.

 Find . -name "* .txt" -mmin 10 | xargs -n1 -I 'fil' mv 'fil' ./praksis 

Sådan fortæller du xargs, når du skal afslutte

Antag, at du vil angive detaljerne for alle de .txt-filer, der er til stede i den aktuelle mappe. Som allerede forklaret kan det nemt gøres ved hjælp af følgende kommando:

 Find . -name "* .txt" | xargs ls -l 

Men der er et problem; xargs kommandoen udfører kommandoen ls selvom find kommandoen ikke finder nogen .txt-fil. Her er et eksempel:

Så du kan se, at der ikke er nogen. txt filer i mappen, men det stoppede ikke xargs fra at udføre ls kommandoen. For at ændre denne adfærd skal du bruge kommandolinjen -r :

 Find . -name "* .txt" | xargs -r ls -l 

Konklusion

Selv om jeg har koncentreret mig her om at bruge xargs med find, kan den også bruges sammen med mange andre kommandoer. Gå gennem kommandos hovedside for at lære mere om det, og giv en kommentar nedenfor, hvis du har en tvivl / forespørgsel.