Primjer Primjena "Xargs" naredbe

Opis i uvod

Xargs naredba obično se koristi u naredbenoj liniji gdje se izlaz jedne naredbe prenosi kao ulazni argumenti na drugu naredbu.

U mnogim slučajevima, nijedna posebna naredba kao što je xargs nije potrebna za to, jer operatori "cijevi" i "preusmjeravanja" obavljaju transakciju istog tipa. Međutim, ponekad postoje problemi s osnovnim mehanizmom cjevovoda i preusmjeravanja, npr. Ako argumenti sadrže razmake, taj xargs nadilazi.

Osim toga, xargs izvršava navedenu naredbu više puta, ako je potrebno, za obradu svih argumenata koji su mu dodijeljeni. U stvari, možete odrediti koliko argumenata treba pročitati sa standardnog ulaznog toka svaki puta kad xargs izvršava navedenu naredbu.

Općenito, naredba xargs treba koristiti ako se izlaz jedne naredbe koristi kao dio opcija ili argumenata druge naredbe na koju se podaci struji (pomoću operatora cijevi "|"). Redovita cijevna cijev je dovoljna ako su podaci namijenjeni za (standardni) ulaz druge naredbe.

Na primjer, ako koristite ls naredbu za generiranje popisa naziva datoteka i direktorija, a zatim cijepite ovaj popis u naredbu xargs koja izvršava eho , možete odrediti koliko imena datoteka ili naziva direktorija obrađuju echo na svakoj iteraciji kako slijedi :

ls | xargs -n 5 echo

U tom slučaju echo prima istodobno pet naziva datoteka ili imenika. Budući da jeka dodaje novi redak na kraju, na svakoj liniji napisat će se pet naziva.

Ako izvršite naredbu koja vraća velike i nepredvidljive brojčane stavke (npr. Nazive datoteka) koje se prenose na drugu naredbu za daljnju obradu, dobro je kontrolirati maksimalni broj argumenata koje druga naredba prima kako bi se izbjeglo preopterećenje i pad sustava.

Sljedeća naredba linija particija je tok naziva datoteka proizvedenih od strane find int skupine od 200 prije nego što je proslijeđena na naredbu cp , koja ih kopira u rezervni direktorij.

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

Element "./" u naredbi za pronalaženje određuje trenutni direktorij za pretraživanje. Argument "-type f" ograničava pretraživanje datotekama, a zastava "-name" * .txt "dalje filtrira sve one koje nemaju produžetak" .txt ". Zastava -i u xargs signalizira da { } označava svaki naziv datoteke pare.

Sljedeća naredba pronalazi datoteke s nazivom jezgre u ili ispod direktorija / tmp i briše ih.

pronađi / tmp-name core-type f -print | xargs / bin / rm-f

Imajte na umu da će to biti neispravno ako postoje nazivi datoteka koji sadrže nove linije, jednokratne ili dvostruke navodnike ili razmake. Sljedeća inačica obrađuje nazive datoteka na takav način da se nazivi datoteka ili imenika koji sadrže jednokratne ili dvostruke navodnike, prostore ili nove linije ispravno obrađuju.

pronađi / tmp-name core-tip f -print0 | xargs -0 / bin / rm-f

Umjesto opcije -i možete koristiti i -I flag koji određuje niz koji je zamijenjen ulaznom linijom u naredbenim argumentima kao u ovom primjeru:

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

Zamjenski niz definiran je kao "{}". To znači da se sve pojave "{}" u naredbenim argumentima zamjenjuju ulaznim elementom koji se prosljeđuje na args kroz rad cijevi. To vam omogućuje postavljanje ulaznih elemenata na određene položaje u argumentima naredbe koja se (opetovano) izvršava.