Com executar ordres des de l'entrada estàndard mitjançant Tee i Xargs a Linux


Mentre utilitzeu la línia d'ordres, podeu passar directament la sortida d'un programa (per exemple, una eina que genera algun awk, per a un processament posterior), mitjançant una canalització.

Dues de les utilitats de línia d'ordres més importants que es poden utilitzar amb canalitzacions per crear línies d'ordres són:

  • xargs: llegeix fluxos de dades de l'entrada estàndard, després genera i executa línies d'ordres.
  • tee: llegeix des de l'entrada estàndard i escriu simultàniament a la sortida estàndard i un o molts fitxers. És més aviat una ordre de redirecció.

En aquest article senzill, descriurem com crear i executar diverses ordres des d'una entrada estàndard mitjançant ordres pipes, tee i xargs a Linux.

La sintaxi més senzilla per utilitzar una canonada, que potser ja heu vist a les ordres de molts tutorials de Linux, és la següent. Però podeu crear una línia d'ordres més llarga amb diverses ordres.

$ command1 args | command2 args 
OR
# command1 args | command2 args | command3 args ...

A continuació es mostra un exemple d'ús d'un pipeline per passar la sortida de l'ordre head.

$ dmesg | head

Com utilitzar xargs per executar ordres

En aquest exemple, la segona ordre converteix la sortida de diverses línies en una sola línia mitjançant xargs.

$ ls -1 *.sh
$ ls -1 *.sh | xargs

Per comptar el nombre de línies/paraules/caràcters de cada fitxer d'una llista, utilitzeu les ordres següents.

$ ls *.sh | xargs wc -l	    #count number of lines in each file
$ ls *.sh | xargs wc -w	    #count number of words in each file
$ ls *.sh | xargs wc -c	    #count number of characters in each file
$ ls *.sh | xargs wc	    #count lines, words and characters in each file

L'ordre següent cerca i suprimeix recursivament el directori anomenat All al directori actual.

$ find . -name "All" -type d -print0 | xargs  -0 /bin/rm -rf "{}"

L'ordre find amb l'acció de l'opció -print0 permet imprimir la ruta completa del directori a la sortida estàndard, seguida d'un caràcter nul i el senyalador -0 xargs s'ocupa de l'espai als noms de fitxer.

Podeu trobar altres exemples pràctics d'ús d'ordres xargs en aquests articles:

  1. Com copiar un fitxer a diversos directoris a Linux
  2. Canvia el nom de tots els fitxers i els noms de directoris en minúscules a Linux
  3. 4 maneres de convertir per lots el vostre PNG a JPG i viceversa
  4. 3 maneres d'eliminar tots els fitxers d'un directori excepte un o pocs fitxers amb extensions

Com utilitzar Tee amb ordres a Linux

Aquest exemple mostra com enviar la sortida d'ordres a la sortida estàndard i desar-la en un fitxer; l'ordre següent us permet veure els processos en execució més alts segons l'ús més elevat de memòria i CPU a Linux.

$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee topprocs.txt
$ cat  topprocs.txt

Per afegir dades a un fitxer existent, passeu el senyalador -a.

$ ps -eo cmd,pid,ppid,%mem,%cpu --sort=-%mem | head | tee -a topprocs.txt 

Podeu trobar més informació a les pàgines de manual de tee i xargs.

$ man xargs
$ man tee

Això és tot! No us oblideu de consultar el nostre article especial: Comandes de Linux A - Z - Visió general amb exemples.

En aquest article, vam descriure com generar línies d'ordres mitjançant pipelines; ordres xargs i tee. Podeu fer qualsevol pregunta o compartir qualsevol reflexió mitjançant el formulari de comentaris que trobareu a continuació.