Pavyzdys "xargs" komandos naudojimas

Aprašymas ir įvadas

" Xargs" komanda paprastai naudojama komandinėje eilutėje, kai vienos komandos išvestis, kaip įėjimo argumentai, perduodama kitai komandai.

Daugeliu atvejų tam specialiai komandai, tokiai kaip xargs, nereikia, nes operatoriai "vamzdis" ir "peradresavimas" atlieka tokio paties tipo sandorį. Tačiau kartais yra problemų su pagrindiniu vamzdynu ir peradresavimo mechanizmu, pvz., Jei argumentuose yra tarpų, kad xargas įveikia.

Be to, xargs vykdo nurodytą komandą pakartotinai, jei reikia, apdoroti visus jai pateiktus argumentus. Iš tikrųjų galite nurodyti, kiek argumentų reikėtų nuskaityti iš standartinio įvesties srauto kiekvieną kartą, kai xargs vykdo nurodytą komandą.

Apskritai, xargs komanda turėtų būti naudojama, jei vienos komandos išvestis turi būti naudojama kaip antrosios komandos, prie kurios duomenys yra perduodami (naudojant vamzdžių operatorių "|"), parinkčių ar argumentų dalis. Paprastas vamzdynas yra pakankamas, jei duomenys yra antrosios komandos (standartinės) įvadas.

Pavyzdžiui, jei naudojate ls komandą, kad sugeneruotumėte failų vardų ir katalogų sąrašą, tada vamzdžius šį sąrašą į komandą xargs, vykdančią echo , galite nurodyti, kiek failų vardų ar katalogų pavadinimų apdorojama echo kiekvienoje iteracijoje taip :

ls | xargs-n 5 echo

Šiuo atveju echo gauna penkis failų ar katalogų pavadinimus vienu metu. Kadangi echo pabaigoje pridedamas naujos eilutės simbolis, kiekvienoje eilutėje parašyta penkių pavadinimų.

Jei vykdote komandą, kuri grąžina didelius ir nenuspėjamus numerius (pvz., Failų pavadinimus), kurie perduodami kitai komandai tolesniam apdorojimui, yra tikslinga kontroliuoti maksimalų antrosios komandos pateiktų argumentų skaičių, kad būtų išvengta perkrovos ir gedimo.

Toliau pateikiama komandų eilutė pertvarko failų pavadinimų srautą, sukurtą ieškant int 200 grupių, prieš perkeliant į komandą cp , kuri juos kopijuoja atsarginių kopijų kataloge.

rasti ./-tipo f-vardas "* .txt" -print | xargs -l200 -i cp -f () ./backup

"./" elementas komandoje "rasti" nurodo dabartinį paieškos katalogą. Argumentas "-type f" apriboja paiešką failuose, o vėliava "-name" * .txt toliau filtruoja viską, kas neturi plėtinio ".txt". "X" žymenų " -i" signalas rodo, kad { } žymėjimas nurodo kiekvieną garo failo pavadinimą.

Šioje komandoje failai vadinami pagrindiniu kataloge / tmp kataloge arba šalia jų ir ištrinami.

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

Atkreipkite dėmesį, kad tai veiks netinkamai, jei yra failų pavadinimų, kuriuose yra naujos eilutės, vienos ar dvigubos kabutės ar tarpai. Šioje versijoje failų vardai apdorojami taip, kad failų ar katalogų pavadinimai, kuriuose yra viengubos ar dvigubos kabutės, tarpai ar naujos eilutės, būtų tinkamai tvarkomos.

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

Vietoj varianto -i galite naudoti -I vėliavėlę, kuri nurodo eilutę, kuri yra pakeista įvesties eilute komandų argumentuose, kaip šiame pavyzdyje:

ls dir1 | xargs -I () -t mv dir1 / () dir / () / code>

Pakeičiamoji eilutė apibrėžiama kaip "{}". Tai reiškia, kad bet kokie "{}" įvykiai komandų argumentuose pakeičiami įvesties elementu, perduotu args per vamzdžio operaciją. Tai leidžia įdėti įvesties elementus konkrečiose komandų argumentų pozicijose, kurios bus (pakartotinai) vykdomos.