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


Mientras usa la línea de comando, puede pasar directamente la salida de un programa (por ejemplo, una herramienta que genera algún awk, para su posterior procesamiento), usando una canalización.

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

  • xargs : lee flujos de datos de la entrada estándar, luego genera y ejecuta líneas de comando.
  • tee : lee desde la entrada estándar y escribe simultáneamente en la salida estándar y en uno o varios archivos. Es más un comando de redirección.

En este artículo simple, describiremos cómo construir y ejecutar múltiples comandos desde la entrada estándar usando los comandos pipe, tee y xargs en Linux.

La sintaxis más simple para usar una tubería, que es posible que ya haya visto en los comandos de muchos de los tutoriales de Linux, es la siguiente. Pero puede 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 head.

$ dmesg | head

Cómo utilizar xargs para ejecutar comandos

En este ejemplo, el segundo comando convierte la salida de varias líneas en una sola línea usando 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 borra de forma recursiva el directorio llamado All en el directorio actual.

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

El comando de búsqueda con la acción de la opción -print0 habilita la impresión de la ruta completa del directorio en la salida estándar, seguida de un carácter nulo y el indicador -0 xargs trata con el espacio en los nombres de archivo.

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

  1. Cómo copiar un archivo a varios directorios en Linux
  2. Cambiar el nombre de todos los archivos y directorios a minúsculas en Linux
  3. 4 formas de convertir por lotes su PNG a JPG y viceversa
  4. Tres formas de eliminar todos los archivos de un directorio, excepto uno o pocos archivos con extensiones

Cómo usar Tee con comandos en Linux

Este ejemplo muestra cómo enviar la salida de un comando a la salida estándar y guardarla en un archivo; el comando a continuación le permite ver los principales procesos en ejecución por 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 agregar 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 pipelines; comandos xargs y tee. Puede hacer cualquier pregunta o compartir sus pensamientos a través del formulario de comentarios a continuación.