Exemple Usos del comandament "xargs"

Descripció i introducció

La comanda xargs s'utilitza normalment en una línia d'ordres on la sortida d'una ordre es passa com a arguments d'entrada a un altre comandament.

En molts casos, no cal una ordre especial, com ara xargs, perquè els operadors "pipe" i "redirection" realitzen la mateixa transacció. Tanmateix, de vegades hi ha problemes amb la canalització bàsica i el mecanisme de redirecció, per exemple, si els arguments contenen espais, els xargs superen.

A més, xargs executa l'ordre especificada repetidament, si és necessari, per processar tots els arguments donats. De fet, podeu especificar quants arguments s'han de llegir de la seqüència d'entrada estàndard cada vegada que els xargs executen l'ordre especificada.

En general, l'ordre xargs s'ha d'utilitzar si la sortida d'una comanda s'ha d'utilitzar com a part de les opcions o arguments d'un segon comandament al que es transmeten les dades (utilitzant l'operador de canonades "|"). Les canonades regulars són suficients si les dades estan destinades a ser l'entrada (estàndard) del segon comandament.

Per exemple, si utilitzeu l'ordre ls per generar una llista de noms i directoris de fitxers i, a continuació, col·loqueu aquesta llista a l'ordre xargs que executa l' echo , podeu especificar quants noms de fitxer o noms de directori es processen per eco en cada iteració de la manera següent :

ls | xargs -n 5 echo

En aquest cas, l' eco rep cinc noms d'arxiu o directori a la vegada. Atès que echo afegeix un caràcter de nova línia al final, s'escriuen cinc noms a cada línia.

Si executeu una ordre que retorna un nombre gran i imprevisible (p. Ex., Noms d'arxiu) que es passa a un altre comandament per a processament posterior, és una bona idea controlar el màxim nombre d'arguments que rep el segon comandament per evitar sobrecàrregues i bloquejar-se.

La següent línia de comandaments particiona el flux de noms de fitxers produïts per int trobar els grups de 200 abans de passar a l'ordre cp , que els copia al directori de còpia de seguretat .

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

L'element "./" de la comanda find especifica el directori actual per a la cerca. L'argument "-type f" restringeix la cerca als fitxers, i la marca "-name" * .txt "filtra encara més qualsevol cosa que no tingui una extensió" .txt ". La marca -i en xargs indica que la { } la notació representa el nom del fitxer del vapor.

La següent ordre troba fitxers anomenats nucli dins o per sota del directori / tmp i els elimina.

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

Tingueu en compte que això funcionarà de manera incorrecta si hi ha fitxers que continguin línies noves, cometes o espais individuals o dobles. La següent versió processa els noms dels fitxers de manera que els fitxers o noms de directoris que continguin cometes o espais individuals o dobles, es tractin correctament.

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

En lloc de l'opció -i , també podeu utilitzar l'indicador -I que especifica la cadena que se substitueix per la línia d'entrada en els arguments de comandament com en aquest exemple:

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

La cadena de reemplaçament es defineix com "{}". Això vol dir que qualsevol aparició de "()" en els arguments de la comanda se substitueix per l'element d'entrada reenviat a args a través de l'operació de la canonada. Això permet col·locar els elements d'entrada en posicions específiques en els arguments de la comanda a executar-se (repetidament).