Udfør flere operationer i Linux med kommandoen 'xargs'
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.