Primer Upotreba naredbe "xargs"

Opis i uvod

Komanda xargs se obično koristi u komandnoj liniji gde se izlaz jedne komande prenosi kao ulazni argument u drugu komandu.

U mnogim slučajevima nije potrebna nikakva posebna komanda, kao što je xargs, pošto operateri "cevi" i "preusmeravanja" obavljaju istu vrstu transakcije. Medjutim, ponekad postoje problemi sa osnovnim mehanizmom za cijevanje i preusmeravanje, npr. Ako argumenti sadrže prostore, on prelazi.

Pored toga, xargs izvršava određenu komandu više puta, ako je potrebno, da obrađuje sve argumente datim na njega. U stvari, možete odrediti koliko argumenata treba pročitati od standardnog ulaznog protoka svaki put kada xargs izvrši određenu komandu.

Generalno, komanda xargs treba koristiti ako se izlaz jedne naredbe koristi kao deo opcija ili argumenata druge komande na koju se podaci prenose (pomoću operatera cevi "|"). Redovna cjevčica je dovoljna ako su podaci namijenjeni za (standardni) ulaz druge komande.

Na primjer, ako koristite komandu ls za generiranje liste imena datoteka i direktorija, a zatim popunite ovu listu u komandu xargs kojom se izvršava echo , možete odrediti koliko imena datoteka ili imena direktorija obrađuje eho na svakoj iteraciji na sljedeći način :

ls | xargs -n 5 echo

U tom slučaju, eho primi pet imena datoteka ili direktorija istovremeno. Pošto eho dodaje novu liniju na kraju, na svakoj liniji se piše pet imena.

Ako izvršite komandu koja vraća velike i nepredvidljive stavke broja (npr. Imena datoteka) koja se prenose na drugu naredbu za dalju obradu, dobra je ideja da kontrolišete maksimalan broj argumenata koje druga komanda prima kako bi se izbjeglo preopterećenje i pucanje.

Sledeća komandna linija deli particije imena datoteka proizvedenih pomoću pronalaska int grupa od 200 pre nego što ih prenesu u komandu cp , koja ih kopira u rezervni direktorij.

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

Element "./" u naredbi za pronalazak određuje trenutni direktorij za pretraživanje. Argument tipa "tip" ograničava pretragu datoteka, a "-name" * .txt "oznaka dalje filtrira sve što nema" .txt "ekstenziju.I-flag u xargs signalizira da { } oznaka predstavlja svako ime datoteke para.

Sledeća komanda pronađe datoteke imenom jezgro u ili ispod direktorijuma / tmp i briše ih.

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

Imajte na umu da će ovo raditi pogrešno ako postoje imena datoteka koja sadrže nove linije, pojedinačne ili dvostruke citate ili razmake. Sledeća verzija obrađuje imena datoteka tako da imena datoteka ili direktorijuma koji sadrže pojedinačne ili dvostruke citate, razmake ili nove linije pravilno se obrađuju.

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

Umesto opcije -i možete koristiti i -I zastavu koja specificira niz koji je zamijenjen ulaznom linijom u komandnim argumentima kao u ovom primeru:

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

Zamjenski niz je definisan kao "{}". To znači da se bilo koji pojava "{}" u komandnim argumentima zamjenjuje ulaznim elementom koji se prosljeđuje argumima kroz rad cijevi. Ovo vam omogućava da postavite ulazne elemente na određene pozicije u argumentima komande da se (više puta) izvršavaju.