Shembuj Përdorimet e komandës "xargs"

Përshkrimi dhe Hyrje

Komanda xargs përdoret zakonisht në një rresht komandues ku prodhimi i një komande kalon si argumente hyrëse në një komandë tjetër.

Në shumë raste, nuk ka komandë të veçantë si xargs për të arritur këtë, pasi operatorët "tub" dhe "redirection" kryejnë transaksion të njëjtë të tipit. Megjithatë, nganjëherë ka probleme me mekanizmin bazë të tubimit dhe përcjelljes, p.sh., nëse argumentet përmbajnë hapësira, xargs tejkalon.

Përveç kësaj, xargs ekzekuton komandën e specifikuar në mënyrë të përsëritur, nëse është e nevojshme, për të përpunuar të gjitha argumentet që i janë dhënë. Në fakt, ju mund të specifikoni sa argumente duhet të lexoni nga transmetimi standard i transmetimit çdo herë që xargs ekzekuton komandën e specifikuar.

Në përgjithësi, komanda xargs duhet të përdoret nëse prodhimi i një komande duhet të përdoret si pjesë e opsioneve ose argumenteve të një komande të dytë në të cilën të dhënat transmetohen (duke përdorur operatorin e tubave "|"). Tubacionet e rregullta janë të mjaftueshme nëse të dhënat kanë për qëllim të jenë hyrja (standarde) e komandës së dytë.

Për shembull, nëse përdorni komandën ls për të gjeneruar një listë të emrave të skedarëve dhe drejtorive, dhe pastaj vendosni këtë listë në komandën xargs duke ekzekutuar echo , ju mund të specifikoni sa emra të skedarëve ose emrat e direktorisë janë përpunuar me echo në çdo përsëritje si më poshtë :

ls | xargs -n 5 echo

Në këtë rast, echo merr pesë emra të dosjeve ose dosjeve në të njëjtën kohë. Meqenëse echo shton një karakter të ri në fund, pesë emra janë të shkruara në çdo rresht.

Nëse ekzekutoni një komandë që kthen një numër numrash të mëdha dhe të paparashikueshme (p.sh. emrat e skedarëve) të cilat kalohen në një komandë tjetër për përpunim të mëtejshëm, është një ide e mirë për të kontrolluar numrin maksimal të argumenteve që komanda e dytë merr për të shmangur mbingarkesat dhe crashing.

Linja e komandës në vijim ndan rrjedhën e emrave të skedarëve të prodhuara nga find int në grupet e 200 para se të kalojë në komandën cp , e cila i kopjon ato në dosjen rezervë .

gjeni ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Elementi "./" në komandën e gjeni specifikon direktorinë aktuale për kërkimin. Argumenti "-type f" kufizon kërkimin në skedarë dhe "flamuri" -name "* .txt" filtron më tej çdo gjë që nuk ka një shtrirje ".txt". Flamuri i -i në xargs sinjalizon që { } paraqet çdo emër file i avullit.

Komanda e mëposhtme gjen skedarë të emëruar në bazë ose poshtë directory / tmp dhe i fshin ato.

gjeni / tmp -name core -type f -print | xargs / bin / rm -f

Vini re se kjo do të funksionojë gabim nëse ka ndonjë emër file që përmban linja të reja, citate të vetme ose të dyfishta ose hapësira. Versioni i mëposhtëm përpunon emrat e skedarëve në mënyrë të tillë që emrat e skedarëve ose emrave të direktorisë që përmbajnë kuotat e vetme ose të dyfishta, hapësira ose linja të reja janë trajtuar në mënyrën e duhur.

gjeni / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Në vend të opcionit -i ju gjithashtu mund të përdorni flamurin -I i cili specifikon vargun që zëvendësohet nga linja e hyrjes në argumentet e komandës si në këtë shembull:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / kod>

Stili i zëvendësimit përcaktohet si "{}". Kjo do të thotë, çdo dukuri e "{}" në argumentet e komandës zëvendësohet nga elementi i inputit i përcillet args përmes operacionit tub. Kjo ju mundëson të vendosni elementët e hyrjes në pozicione specifike në argumentet e komandës që do të ekzekutohet (në mënyrë të përsëritur).