Tutorial completo de xargs en Linux para sacarle todo el partido

Última actualización: 17/12/2025
Autor: Isaac
  • xargs convierte la entrada estándar en argumentos para otros comandos y permite encadenar herramientas como find, rm, grep o gzip.
  • Sus opciones clave (-0, -I, -n, -P, -p, -t, -a, -d) controlan cómo se leen los datos, cómo se forman los comandos y cómo se ejecutan.
  • Es fundamental extremar la precaución con comandos destructivos y apoyarse en confirmaciones y pruebas previas para evitar errores graves.
  • Frente a alternativas como find -exec, xargs ofrece una gran flexibilidad y eficiencia para manejar listas largas y lanzar procesos en paralelo.

tutorial de xargs en linux

Si trabajas con la terminal de Linux a menudo, tarde o temprano te toparás con xargs y su forma tan peculiar de encadenar comandos. Es de esas utilidades que mucha gente pasa por alto, pero que cuando la entiendes bien te ahorra una barbaridad de tiempo, sobre todo cuando manejas muchos ficheros o salidas muy largas.

Aunque no es de los comandos más famosos, xargs es una herramienta muy potente para convertir la entrada estándar en argumentos reales de otro comando. Gracias a eso puedes hacer cosas como borrar cientos de archivos, renombrarlos, buscar texto dentro de un montón de ficheros o lanzar procesos en paralelo sin romperte la cabeza con scripts complicados.

Qué es exactamente xargs en Linux

El nombre xargs viene de “extended arguments”, y describe muy bien lo que hace: toma datos de la entrada estándar (STDIN) y los transforma en argumentos para otro comando. Dicho de forma más llana, coge lo que sale por la tubería de un comando y lo usa como si tú mismo lo hubieras escrito a mano detrás del siguiente comando.

Muchos usuarios de Linux casi no usan xargs, pero su utilidad se dispara cuando trabajas con listas largas de elementos, como rutas de archivos, resultados de búsquedas o cualquier salida de texto que quieras procesar. Con él puedes automatizar tareas repetitivas y minimizar errores humanos al no tener que teclear listas interminables.

En la práctica, xargs sirve para “conectar” dos comandos entre sí de forma muy flexible. El primer comando genera una lista de elementos (por ejemplo, find devuelve rutas de ficheros) y xargs se encarga de alimentar al segundo comando (por ejemplo, rm, grep, mkdir, gzip…) con esos datos convertidos en argumentos válidos.

Casi todas las distribuciones habituales —como Debian, Ubuntu y la mayoría de sabores GNU/Linux— traen xargs instalado por defecto dentro del paquete coreutils o findutils, así que normalmente no tienes que instalar nada adicional para usarlo.

Además de simplificar el trabajo, xargs también puede ayudarte a proteger tu sistema cuando lo combinas con opciones interactivas o verificaciones previas, algo muy interesante si lo utilizas con comandos destructivos como rm o mv.

Cómo funciona xargs por dentro

El funcionamiento básico de xargs es sencillo: lee desde la entrada estándar, separa esa entrada en “trozos” (argumentos) y construye comandos a partir de ellos. Esos comandos se ejecutan tantas veces como haga falta, en función de las opciones que hayas seleccionado y del número de argumentos que se pasen en cada invocación.

Cuando xargs no recibe ningún comando explícito como parámetro, utiliza por defecto el comando echo. Esto significa que, si solo escribes xargs sin nada más, lo que hará será mostrar por pantalla los argumentos que ha construido a partir de la entrada estándar.

Por ejemplo, si ejecutas algo tan sencillo como:

echo "uno dos tres" | xargs

lo que obtendrás será que xargs lance internamente echo uno dos tres, y por tanto veas en pantalla exactamente esa línea. Es una forma rápida de entender cómo “traduce” la entrada en argumentos.

Otra característica clave es que xargs tiene en cuenta limitaciones del sistema, como la longitud máxima de la línea de comandos. En vez de construir una orden gigantesca con miles de argumentos de golpe, los agrupa en bloques razonables, ejecutando el comando varias veces si hace falta para no pasarse de esos límites.

Todo esto lo hace respetando reglas de separación de argumentos: por defecto considera los espacios en blanco, tabuladores y saltos de línea como separadores, aunque como veremos más adelante puedes cambiar este comportamiento con distintas opciones para adaptarlo a rutas con espacios, saltos de línea especiales o separadores nulos.

  Easy methods to Take Screenshot On iPhone (All Fashions)

Sintaxis del comando xargs

La forma general de usar xargs en la terminal es muy compacta: colocas un comando que envíe datos por la salida estándar, añades una tubería y después invocas xargs con las opciones y el comando de destino que te interesen.

La sintaxis básica sería:

xargs comando

En el flujo típico, harías algo como:

comando_que_genera_lista | xargs comando_destino

De este modo, el comando_destino se ejecuta con los argumentos que provienen de comando_que_genera_lista. Cada grupo de elementos que xargs construye a partir de STDIN se pasa como parámetros al comando, y este se invoca una o varias veces según el tamaño de la lista y las restricciones que hayas definido.

Si omites el comando_destino, ya sabes que xargs usará echo por defecto y simplemente te mostrará la reconstrucción de argumentos, algo que resulta muy práctico para probar y depurar antes de lanzar acciones más delicadas.

Opciones más importantes de xargs

xargs dispone de un buen puñado de opciones que controlan cómo lee la entrada, cómo forma los argumentos y cómo lanza los comandos. Algunas de estas banderas son vitales para manejar nombres de fichero raros, trabajar de forma interactiva o exprimir el rendimiento lanzando procesos en paralelo.

Entre las opciones más utilizadas se encuentran las siguientes (hay variantes cortas y largas):

  • -0 o –null: con esta opción, xargs considera que los argumentos vienen separados por el carácter NULL (\0) en lugar de por espacios o saltos de línea. Esta técnica es fundamental cuando trabajas con nombres de archivo que contienen espacios, saltos de línea u otros caracteres problemáticos. Suele combinarse con find ... -print0 para garantizar que nada se rompe por culpa de los espacios.
  • -a o –arg-file archivo: en vez de leer la entrada por la tubería estándar, xargs toma los argumentos desde un archivo de texto. Cada línea o separador que contenga el fichero se interpreta como argumentos a procesar. Muy útil si tienes una lista precompleta de rutas o elementos.
  • -d o –delimiter carácter: esta opción te permite especificar un carácter delimitador personalizado para separar los argumentos. Así, cada carácter se interpreta literalmente y no se usan los espacios en blanco como separadores por defecto. Es conveniente cuando la entrada sigue un formato muy concreto.
  • -p o –interactive: hace que xargs pregunte antes de ejecutar cada comando. Imprime la orden que está a punto de lanzar y te pide confirmación (normalmente respondiendo con y/n). Es especialmente interesante cuando piensas usar xargs junto con rm, mv u otras acciones potencialmente destructivas.
  • -I marcador: define un “token” o marcador (como {}) que se sustituye en el comando por el valor actual de la entrada. Esto permite construir órdenes más complejas o colocar el argumento en el punto exacto que te interese dentro del comando.
  • -n número: indica cuántos argumentos se pasan al comando en cada ejecución. Con esto, controlas el tamaño de cada tanda y evitas lanzar acciones con listas demasiado grandes de golpe.
  • -P número: marca el número máximo de procesos a ejecutar en paralelo. Es una forma muy cómoda de paralelizar trabajos como compresiones o procesados pesados sobre muchos archivos, acelerando el tiempo total de la tarea.
  • -t: le dice a xargs que imprima por pantalla cada comando antes de ejecutarlo. Es una herramienta de depuración muy cómoda, porque ves exactamente qué se va a lanzar.

Combinando estas banderas puedes adaptar xargs a casi cualquier flujo de trabajo, desde tareas sencillas de limpieza de archivos hasta scripts complejos que procesan datos y los encadenan entre varios programas.

Ejemplos básicos para entender xargs

Lo mejor para cogerle el truco a xargs es verlo en acción. A continuación tienes varios ejemplos prácticos que ilustran cómo redirigir la salida de un comando hacia otro utilizando xargs como puente y aprovechando sus distintas opciones.

Crear directorios a partir de una lista

Imagina que quieres crear varias carpetas cuyos nombres tienes en una sola línea. Con xargs puedes hacer algo tan directo como:

  Sincronizar con rsync en Linux: guía completa y trucos prácticos

echo "carpeta1 carpeta2 carpeta3" | xargs mkdir

Aquí, el echo genera la cadena con los nombres y xargs la divide en tres argumentos distintos y los pasa al comando mkdir. El resultado es que se crean tres directorios en el directorio actual: carpeta1, carpeta2 y carpeta3, todo con una sola orden.

Ejecutar comandos con confirmación previa

Cuando vas a realizar acciones que pueden borrar datos, viene muy bien verificar antes de ejecutarlas. Para eso sirve la opción -p. Un ejemplo sencillo sería:

echo "archivo1 archivo2 archivo3" | xargs -p touch

En este caso, xargs mostrará el comando touch con los argumentos que piensa usar y te preguntará si quieres continuar. Si confirmas, creará esos ficheros (o actualizará su fecha de modificación si ya existen). Esta aproximación es perfecta como “red de seguridad” cuando estás probando combinaciones más arriesgadas.

Buscar texto dentro de múltiples archivos

Una combinación muy típica es usar find para localizar archivos y xargs con grep para buscar texto dentro de todos ellos. Por ejemplo, para localizar en /etc todos los archivos con extensión .conf que contengan la palabra root, podrías usar:

find /etc -iname "*.conf" | xargs grep "root"

Aquí, find genera la lista de archivos de configuración y xargs se encarga de pasarlos como argumentos a grep, que buscará la palabra “root” en cada uno. Es una forma muy rápida de inspeccionar muchísimos ficheros de configuración en un solo comando.

Eliminar archivos antiguos de un directorio

Otro uso muy frecuente es la limpieza de archivos viejos. Por ejemplo, para buscar en /tmp todos los ficheros con más de una semana de antigüedad y borrarlos, podrías hacer algo así:

find /tmp -mtime +7 | xargs rm

En este caso, find va listando cada ruta candidata y xargs invoca rm con esos ficheros como argumentos. Eso sí, cuando se trata de borrados masivos, conviene tomar precauciones adicionales, como probar primero con -print o usar xargs -p rm para confirmar antes de eliminar.

Ejemplos avanzados y buenas prácticas con xargs

Más allá de los ejemplos básicos, xargs brilla cuando empiezas a combinar marcadores personalizados, ejecución en paralelo y separadores nulos. Aquí es donde de verdad se convierte en una navaja suiza para scripts y automatizaciones.

Eliminar archivos con seguridad usando -0

Cuando quieres borrar todos los archivos .txt de un directorio, lo más robusto es combinar find con -print0 y xargs con -0 para manejar nombres con espacios de forma correcta:

find . -type f -name "*.txt" -print0 | xargs -0 rm -f

En este comando, find genera la lista de archivos .txt y separa cada nombre con un carácter nulo gracias a -print0. Después, xargs con la opción -0 interpreta esa separación nula y pasa los nombres de archivo de manera segura a rm -f, sin confundirse con espacios ni caracteres raros.

Renombrar archivos con un prefijo usando -I

Supón que quieres añadir el prefijo copia_ a todos los archivos .jpg de un directorio. xargs permite construir este tipo de orden usando un marcador que sustituye por el nombre real de cada archivo:

ls *.jpg | xargs -I {} mv {} copia_{}

Aquí, -I {} le indica a xargs que reemplace cada aparición de {} dentro del comando mv por el nombre de archivo actual. De este modo, cada imagen se renombra a la misma ruta pero comenzando por copia_. Es una técnica muy cómoda para operaciones de renombrado más elaboradas.

Comprimir archivos en paralelo con -P

ls *.log | xargs -n 1 -P 4 gzip

En esta orden, -n 1 indica que se pasa un archivo por cada ejecución de gzip, mientras que -P 4 permite tener hasta cuatro procesos gzip activos al mismo tiempo. De este modo, aprovechas mejor los núcleos de la CPU y reduces considerablemente el tiempo total de compresión.

Construir scripts más elaborados con sh -c

xargs también se integra muy bien con shells como sh o bash para ejecutar comandos más complejos por cada elemento de la lista. Por ejemplo, imagina que quieres procesar todos los archivos .txt de un directorio, imprimir su nombre y buscar en ellos un determinado patrón, guardando toda la salida en un fichero de log.

  Cómo inscribirte en Windows Insider: guía completa y actualizada

Una forma de hacerlo sería algo similar a:

find /ruta/a/los/archivos -type f -name "*.txt" | xargs -I {} sh -c 'echo "Procesando {}"; grep "patron" "{}"' >> salida.log

En esta construcción, find genera la lista de archivos, xargs itera sobre cada uno usando -I {} y, para cada iteración, ejecuta un pequeño script en sh -c. Ese script muestra el nombre del archivo y utiliza grep para buscar el patrón dentro del mismo, redirigiendo todo a salida.log. Es un ejemplo muy ilustrativo de la flexibilidad que aporta xargs para encadenar operaciones relacionadas.

Usar archivos como fuente de argumentos con -a

Cuando ya tienes guardada una lista de rutas o elementos en un archivo de texto, puede resultarte más cómodo decirle a xargs que lea directamente desde ese fichero en lugar de usar una tubería. Para eso está la opción -a:

xargs -a lista_de_archivos.txt rm

En este caso, xargs abrirá lista_de_archivos.txt, interpretará su contenido como entradas separadas y pasará esos elementos al comando rm como argumentos, respetando también el resto de opciones que puedas añadir (como -n, -p o -t).

Seguridad, rendimiento y alternativas a xargs

Trabajar con xargs implica tener muy presentes las implicaciones de seguridad y las consecuencias de los comandos que vas a ejecutar. Al automatizar operaciones sobre grandes cantidades de archivos o datos, un pequeño despiste en la sintaxis puede terminar haciendo más daño de la cuenta.

Por ejemplo, cuando combines xargs con rm o mv, es muy recomendable usar frecuentemente las opciones -p o -t para ver qué se va a hacer antes de ejecutarlo de forma masiva. También es buena costumbre probar primero con comandos inocuos (como echo o ls) para verificar que la lista de argumentos es la que esperas.

En cuanto al rendimiento, xargs destaca precisamente por manejar con eficiencia entradas largas que podrían sobrepasar los límites tradicionales de la línea de comandos. Al dividir el trabajo en bloques manejables, se evitan errores como “argument list too long” que aparecen cuando intentas pasar miles de argumentos de golpe a un solo proceso.

La opción -P ayuda a exprimir mejor la máquina lanzando trabajos en paralelo, aunque no siempre más procesos implican mejor rendimiento. Depende mucho de si la tarea es CPU-bound o I/O-bound, del número de núcleos disponibles y de la carga general del sistema. Conviene hacer pruebas para afinar el número ideal de procesos simultáneos.

Por otra parte, en algunos escenarios complejos puede que prefieras usar find con la acción -exec en lugar de xargs. En ocasiones, find ... -exec comando {} \; o -exec ... + puede resultar más legible y auto contenido, al no necesitar una tubería externa. En otros contextos, xargs da más juego y te permite reutilizar mejor componentes, así que la elección depende de la claridad que busques y del estilo de tus scripts.

Sea cual sea el enfoque que elijas, la clave está en entender bien cómo se construyen los argumentos, cómo se tratan los caracteres especiales y qué margen de seguridad tienes antes de lanzar comandos masivos, sobre todo cuando afectan al sistema de ficheros o a datos críticos.

Dominar xargs lleva un rato, pero una vez que interiorizas su lógica de “leer de STDIN y convertir en argumentos”, se convierte en una herramienta imprescindible de tu arsenal en la línea de comandos. Desde pequeñas tareas de limpieza hasta scripts avanzados de procesado y búsqueda, te permitirá trabajar de forma más rápida, flexible y ordenada en cualquier entorno Unix/Linux.

formato dos unix
Artículo relacionado:
Guía definitiva de dos2unix y unix2dos: conversión de archivos entre Windows y Unix