Príklady použitia príkazu "xargs"

Popis a úvod

Príkaz xargs sa zvyčajne používa v príkazovom riadku, kde výstup jedného príkazu prechádza ako vstupné argumenty inému príkazu.

V mnohých prípadoch nie je potrebný žiadny špeciálny príkaz, napríklad xargs, aby sa to dosiahlo, pretože operátori "pipe" a "redirection" vykonávajú rovnakú transakciu. Niekedy však existujú problémy so základným mechanizmom potrubia a presmerovania, napr. Ak argumenty obsahujú medzery, ktoré prekonávajú xargs.

Okrem toho xargs opakovane vykoná zadaný príkaz, ak to bude potrebné, spracovať všetky argumenty, ktoré mu boli zadané. V skutočnosti môžete určiť, koľko argumentov by sa malo prečítať štandardný vstupný tok pri každom vykonaní xargov zadaného príkazu.

Vo všeobecnosti by mal byť príkaz xargs použitý, ak má byť výstup jedného príkazu použitý ako súčasť možností alebo argumentov druhého príkazu, ku ktorému sa údaje prenášajú (pomocou operátora potrubia "|"). Pravidelné potrubie je dostatočné, ak sú údaje určené ako (štandardné) vstupy druhého príkazu.

Napríklad, ak použijete príkaz ls na generovanie zoznamu názvov súborov a adresárov a následne potrubím tento zoznam do príkazu xargs, ktorý vykoná echo , môžete určiť, koľko názvov súborov alebo názvov adresárov sa spracuje echo na každej iterácii takto :

ls | xargs -n 5 echo

V tomto prípade echo prijme naraz päť názvov súborov alebo adresárov. Vzhľadom na to, že ozvena na konci pridá nový znak, na každom riadku je napísaných päť názvov.

Ak vykonáte príkaz, ktorý vráti veľké a nepredvídateľné číselné položky (napr. Názvy súborov), ktoré sú prenesené na iný príkaz na ďalšie spracovanie, je dobré ovládať maximálny počet argumentov, ktoré druhý príkaz dostane, aby sa predišlo preťaženiu a zhadzovaniu.

Nasledujúci príkazový riadok oddeľuje tok názvov súborov vytvorených vyhľadaním int skupín 200 predtým, ako ich odovzdá príkaz cp , ktorý ich kopíruje do adresára zálohovania .

nájsť ./ - typ f - meno "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Prvok "./" v príkaze find určuje aktuálny adresár pre vyhľadávanie. Argument "-type f" obmedzuje vyhľadávanie na súbory a príznak "-name" * .txt "ďalej filtruje čokoľvek, čo nemá príponu" .txt ". Príznak -i v xargs signalizuje, že { } zápis predstavuje každé meno súboru pary.

Nasledujúci príkaz nájde súbory s názvom jadro v alebo pod adresárom / tmp a vymaže ich.

nájsť / tmp -name core -type f -print | xargs / bin / rm -f

Všimnite si, že to bude fungovať nesprávne, ak existujú názvy súborov obsahujúce nové riadky, jednoduché alebo dvojité úvodzovky alebo medzery. Nasledujúca verzia spracováva názvy súborov tak, že názvy súborov alebo adresárov obsahujúce jednoduché alebo dvojité úvodzovky, medzery alebo nové riadky sú správne spracované.

nájsť / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Namiesto voľby -i môžete tiež použiť príznak -I, ktorý špecifikuje reťazec, ktorý je nahradený vstupným riadkom v argumentoch príkazov ako v tomto príklade:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / kód>

Náhradný reťazec je definovaný ako "{}". To znamená, že akékoľvek výskyty "{}" v argumentoch príkazov sú nahradené vstupným prvkom posielaným do args prostredníctvom operácie potrubia. To umožňuje vložiť vstupné prvky na špecifické pozície v argumentoch príkazu, ktorý sa má (opakovane) vykonávať.