El comando xargs

Índice

Función del comando xargs

El comando xargs permite la construcción y ejecución de líneas de comando desde la entrada estándar. Este comando lee los elementos de la línea de la entrada estándar delimitados por espacios o líneas y ejecuta el comando una o más veces con el argumento inicial seguido de los elementos elementos indicados por teclado.

Si no se indica ningún otro comando, el comando que xargs ejecuta por defecto es echo.

~$ xargs
Hola
esto
es una
prueba
Hola esto es una prueba

Tras su ejecución, xargs espera una entrada desde el teclado. En este momento se puede introducir una cadena de texto como en el ejemplo anterior pero también un comando que se ejecutará cuando se especifique el fin de la entrada por teclado.

Aplicación del comando xargs

La principal aplicación de xargs es facilitar y dinamizar las tareas de la administración del sistema. De esta forma, por ejemplo, se pueden listar los ficheros almacenados en varios directorios con la ejecución de un único comando. Por ejemplo, la ejecución de xargs ls -l espera que se introduzcan por teclado los directorios cuyo contenido se quiere listar. Tras indicar los diferentes directorios se indica el fin de la entrada por teclado.

~$ xargs ls -l
/tmp
./Descargas
./pruebas

Como respuesta, xargs devuelve la lista del contenido de todos los directorios indicados.

Opciones más utilizadas del comando xargs

Algunas de las opciones más comúnmente utilizadas en la ejecución de xargs son:

  • -0 --null. Los nombres de fichero de entrada se terminan con un carácter nulo en lugar de con espacio en blanco, y las comillas y barra inversa no son especiales (cada carácter se toma literalmente). Deshabilita el final de la cadena de fin de fichero, que se trata como cualquier otro argumento. Es útil cuando los argumentos pueden contener espacio en blanco, comillas o barras invertidas.
  • -e[eof-str], --eof[=eof-str]. Establece la cadena de fin de fichero a eof-str. Si la cadena de fin de fichero ocurre como una línea de la entrada, el resto de la entrada se descarta. Si esta opción no se da, la cadena de fin de fichero predeterminada es “_”.
  • -i[replace-str], --replace[=replace-str]. Reemplaza ocurrencias de replace-str en los argumentos iniciales con nombres leídos de la entrada estándar. Además, los blancos no entrecomillados no delimitan los argumentos.
  • -L max-lines, -l[max-lines], --max-lines[=max-lines]. Utiliza como mucho max-lines líneas de entrada no en blanco por cada línea de órdenes; el valor predeterminado de max-lines es 1.
  • -n max-args, --max-args=max-args. Utiliza como mucho max-args argumentos por cada línea de órdenes.
  • -p, --interactive. Pregunta al usuario si se debe ejecutar cada línea de órdenes, y lee una línea de la terminal. Sólo ejecuta la línea de órdenes si la respuesta empieza con “y” o “Y” (o quizás el equivalente local, en español “s” o “S”).
  • -r, --no-run-if-empty. Si la entrada estándar no contiene algo distinto de blancos, no se ejecuta la orden. Normalmente, la orden se ejecuta una vez incluso si no hay entrada.
  • -s max-chars, --max-chars=max-chars. Utiliza como mucho max-chars caracteres por cada línea de órdenes, incluyendo la orden y los argumentos iniciales, y los nulos terminadores en los finales de las cadenas de argumentos.
  • -t, --verbose. Muestra la línea de órdenes en la salida estándar de errores antes de ejecutarla.
  • -P max-procs, --max-procs=max-procs. Ejecuta hasta max-procs procesos de una vez; el valor predeterminado es 1. Si max- procs es 0, xargs ejecutará tantos procesos como sea posible de una vez.

Ejemplos de utilización del comando xargs

Un ejemplo de uso interesante para el comando xargs puede ser hacer búsquedas de diferentes archivos en un mismo directorio sin tener que reescribir todo el comando. Por ejemplo, para buscar los ficheros cuyo nombre empieza por “fichA” o “fichB” en el directorio ./prueba/origen/ podemos ejecutar xargs -L 1 find -name y, a continuación, ir introduciendo los criterios de búsqueda, en este caso, fichA*.txt en primer lugar y fichB*.txt posteriormente. De esta forma, la ejecución del comando devolverá todas las coincidencias con ambas búsquedas en el directorio especificado.

~$ xargs -L 1 find -name
fichA*.txt
./fichA5.txt
./fichA.txt
./fichA6.txt
./fichA4.txt
./fichA3.txt
./fichA2.txt
./fichA1.txt
fichB*.txt
./fich3.txt
./fichB.txt
./fichB2.txt
./fichB1.txt

Otra utilidad interesante de xargs puede ser crear ficheros o directorios de forma más rápida y cómoda con una sola línea. Por ejemplo, se puede usar el siguiente comando para crear tres ficheros de nombre A.txt, B.txt y C.txt.

echo A B C | xargs touch

Con xargs también se pueden hacer búsquedas amplias con una única orden. Por ejemplo, usando el siguiente comando se pueden buscar todos los ficheros del directorio /etc con extensión .conf que incluyan la palabra root.

find /etc -iname "*.conf" | xargs grep "root"
comments powered by Disqus

Relacionados

Conceptos de gestión de paquetería en Debian

En este post se recoge un breve resumen sobre la información relativa a los gestores de paquetes apt y aptitude incluida en el manual de referencia de Debian.

Leer

Configuración del balanceador de carga HAProxy

En esta entrada se documenta el proceso de configuración y uso del balanceador de carga HAProxy.

Leer

Enrutamiento dinámico con OSPF usando routers Cisco en GNS3

OSPF (Open Shortest Path First), “Abrir el camino más corto primero” en español, es un protocolo de red para enrutamiento dinámico que usa el algoritmo Dijkstra, para calcular la ruta más corta entre dos nodos.

Leer