Linux / Comando xargs: convertir la entrada en argumentos
xargs lee elementos de la entrada estándar y los pasa como lista de argumentos a otro comando. Se utiliza cuando la salida de una tubería debe ser un argumento como un nombre de archivo, y no datos de entrada para el comando.
Por defecto, xargs separa la entrada por espacios en blanco y saltos de línea e interpreta comillas y barras invertidas. Para conservar nombres de archivo que contengan esos caracteres, combine find -print0 y xargs -0: ambos utilizan el carácter nulo (NUL) como delimitador.
Sintaxis básica
comando_generador | xargs [opciones] comando [argumentos_fijos ...]
La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man xargs en el sistema actual.
Crear y comparar nombres de archivo con espacios directamente
El bloque siguiente solo crea archivos de ejemplo en un nuevo directorio temporal y se ejecuta dentro de los paréntesis. No sobrescribe archivos en el directorio de trabajo existente y muestra la ubicación de los datos en la última línea. Los nombres de archivo utilizados en la sintaxis de los comandos se preparan dentro de este bloque, por lo que ejecute todo el bloque junto. Después de verificar los resultados, elimine únicamente los archivos de práctica cuando ya no los necesite.
(
set -eu
labdir=$(mktemp -d)
cd "$labdir"
mkdir reports
printf 'first\nsecond\n' > 'reports/two words.txt'
printf 'third\n' > 'reports/plain.txt'
printf '%s\0' 'reports/two words.txt' 'reports/plain.txt' |
xargs -0 -r -n 1 printf 'ARG=[%s]\n'
find reports -type f -name '*.txt' -print0 | xargs -0 -r wc -l
printf 'two words\n' | xargs -n 1 printf 'SPLIT=[%s]\n'
printf 'Lab files: %s\n' "$labdir"
)
La salida ARG mantiene "two words.txt" como un solo argumento. El orden de salida por archivo de wc depende del orden de exploración de find, pero el número de líneas debe ser 2 y 1, y el total 3. En el último ejemplo, "two" y "words" se dividen en dos argumentos. Para nombres de archivo arbitrarios, utilice separación NUL, y -r indica la opción de xargs de GNU para manejar entradas vacías. Antes de encadenar un comando de eliminación, verifique los límites de los argumentos con printf.
Opciones y formatos principales
| Opciones·Formato | Descripción |
|---|---|
-0 |
Separar elementos con el carácter NUL. |
-r |
En la implementación de GNU, no se ejecuta si la entrada está vacía. |
-n N |
Pasa un máximo de N argumentos por ejecución del comando. |
-P N |
Ejecuta en paralelo hasta N comandos. |
-I marcador |
Asigna los elementos de entrada a la ubicación especificada del comando. |
Precauciones al usar
Una canalización como find ... -print | xargs rm puede separar incorrectamente nombres que contengan espacios o saltos de línea. Para eliminar, utilice delimitadores NUL o find -exec y compruebe primero los destinos. La ejecución paralela con -P puede alterar el orden de salida y provocar competencia por recursos compartidos.
Preguntas frecuentes
¿Cuál es la diferencia entre usar solo pipes y xargs?
En comando1 | comando2, la salida estándar del primero llega a la entrada estándar del segundo. En cambio, xargs construye argumentos para otro comando con los elementos que lee.
Documentación oficial
Se puede consultar el comportamiento exacto de la opción y las diferencias según la implementación en la página del manual de xargs.




