El comando xargs se usa típicamente en una línea de comandos donde la salida de un comando se pasa como argumento de entrada a otro comando.
En muchos casos, no se necesita ningún comando especial como xargs para lograrlo, ya que los operadores «pipe» y «redirection» realizan el mismo tipo de transacción. Sin embargo, a veces hay problemas con el mecanismo básico de tuberías y redireccionamiento, por ejemplo, si los argumentos contienen espacios que los xargs superan.
Además, xargs ejecuta el comando especificado repetidamente, si es necesario, para procesar todos los argumentos que se le han dado. De hecho, puede especificar cuántos argumentos deben leerse del flujo de entrada estándar cada vez que el xargs ejecute el comando especificado.
Cuándo usarlo
En general, el comando xargs debe ser usado si la salida de un comando debe ser usada como parte de las opciones o argumentos de un segundo comando al que se envían los datos (usando el operador de tubería «|»). La tubería regular es suficiente si se pretende que los datos sean la entrada (estándar) del segundo comando.
Por ejemplo, si utiliza el comando ls para generar una lista de nombres de archivo y directorios, y luego pipetea esta lista en el comando xargs que ejecuta echo, puede especificar cuántos nombres de archivo o nombres de directorio son procesados por echo en cada iteración de la siguiente manera:
En este caso, echo recibe cinco nombres de archivos o directorios a la vez. Dado que echo añade un nuevo carácter de línea al final, se escriben cinco nombres en cada línea.
Si ejecuta un comando que devuelve un número grande e impredecible de elementos (por ejemplo, nombres de archivos) que se pasan a otro comando para su procesamiento posterior, es una buena idea controlar el número máximo de argumentos que recibe el segundo comando para evitar sobrecargas y caídas.
Algunos ejemplos
La siguiente línea de comandos particiona el flujo de nombres de archivos producidos al encontrar los grupos de 200 antes de pasar al comando cp, que los copia al directorio backup.
El elemento «./» del comando find especifica el directorio actual para la búsqueda. El argumento «-type f» restringe la búsqueda a los archivos, y la bandera «-nombre «*.txt» filtra aún más cualquier cosa que no tenga la extensión «.txt». El indicador -i en xargs indica que la notación {} representa cada nombre de archivo del vapor.
El siguiente comando encuentra los archivos nombrados core en o debajo del directorio /tmp y los elimina.
find /tmp -nombre núcleo -tipo f -print | xargs /bin/rm -f
Tenga en cuenta que esto no funcionará correctamente si hay nombres de archivo que contengan líneas nuevas, comillas simples o dobles, o espacios. La siguiente versión procesa los nombres de archivos de tal manera que los nombres de archivos o directorios que contengan comillas simples o dobles, espacios o líneas nuevas se manejen correctamente.
find /tmp -nombre núcleo -tipo f -print0 | xargs -0 /bin/rm -f
En lugar de la opción -i también puede utilizar el indicador -I que especifica la cadena que es reemplazada por la línea de entrada en los argumentos de comando como en este ejemplo:
ls dir1 | xargs -I {} -t mv dir1/{} dir/{} /code>
La cadena de sustitución se define como "{}". Esto significa que cualquier ocurrencia de "{}" en los argumentos del comando es reemplazada por el elemento de entrada enviado a args a través de la operación de la tubería. Esto le permite colocar los elementos de entrada en posiciones específicas en los argumentos del comando a ejecutar (repetidamente).