Cómo ejecutar comandos desde la entrada estándar usando Tee y Xargs en Linux


Mientras usa la línea de comandos, puede pasar directamente la salida de un programa (por ejemplo, una herramienta que genera cierta información del sistema o estadísticas) como entrada para otro programa (como las herramientas de búsqueda de patrones o de filtrado de texto como grep, sed o awk, para su posterior procesamiento), utilizando una tubería.

Dos de las utilidades de línea de comando más importantes que se pueden usar con tuberías para crear líneas de comando son:

  • xargs – reads streams of data from standard input, then generates and executes command lines.
  • tee – reads from standard input and writes simultaneously to standard output and one or many files. It’s more of a redirection command.

En este sencillo artículo, describiremos cómo construir y ejecutar múltiples comandos desde una entrada estándar utilizando los comandos canalizaciones , tee y xargs en Linux.

La sintaxis más simple para usar un conducto , que tal vez ya haya visto en los comandos en muchos de los tutoriales de Linux, es la siguiente. Pero puedes construir una línea de comandos más larga con varios comandos.

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

A continuación se muestra un ejemplo del uso de una canalización para pasar la salida del comando dmesg al comando head.

$ dmesg | head

Cómo usar xargs para ejecutar comandos

En este ejemplo, el segundo comando convierte la salida de línea múltiple en una sola línea utilizando xargs.

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

Para contar el número de líneas/palabras/caracteres en cada archivo en una lista, use los siguientes comandos.

$ 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

El siguiente comando busca y elimina recursivamente el directorio denominado All en el directorio actual.

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

El comando de búsqueda con la opción -print0 permite imprimir la ruta completa del directorio en la salida estándar, seguido de un carácter nulo y la marca -0 xargs se ocupa del espacio en los nombres de archivo.

Puede encontrar otros ejemplos prácticos de uso de comando xargs en estos artículos:

  1. How to Copy a File to Multiple Directories in Linux
  2. Rename All Files and Directory Names to Lowercase in Linux
  3. 4 Ways to Batch Convert Your PNG to JPG and Vice-Versa
  4. 3 Ways to Delete All Files in a Directory Except One or Few Files with Extensions

Cómo usar Tee con comandos en Linux

Este ejemplo muestra cómo enviar una salida de comando a una salida estándar y guardarla en un archivo; El siguiente comando le permite ver los principales procesos en ejecución por el mayor uso de memoria y CPU en Linux.

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

Para adjuntar datos en un archivo (s) existente, pase la marca -a .

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

Puede encontrar más información en las páginas de manual de tee y xargs .

$ man xargs
$ man tee

¡Eso es todo! No olvide consultar nuestro artículo especial: Comandos A - Z de Linux: descripción general con ejemplos.

En este artículo, describimos cómo generar líneas de comando usando tuberías; Comandos xargs y tee. Puede hacer cualquier pregunta o compartir cualquier opinión a través del formulario de comentarios a continuación.