Para algunos de los usuarios más experimentados, siempre estamos buscando nuevas formas de trabajar de manera más inteligente y no más difícil en la terminal. xargs
es un comando útil que actúa como puente entre dos comandos, leyendo el resultado de uno y ejecutando el otro con los elementos leídos. El comando se usa más comúnmente en escenarios cuando un usuario busca un patrón, elimina y cambia el nombre de archivos, y más. Aquí le mostramos cómo utilizar el xargs
mando a tu favor.
¿Qué es xargs?
En su forma básica, xargs
lee información de la entrada estándar (o STDIN) y ejecuta un comando una o más veces con los elementos leídos. Hay muchas demostraciones sencillas, pero aquí hay una que muestra lo que quiero decir.
Tener xargs
ejecutar el ls
comando en mi carpeta Documentos, ejecutaría el siguiente comando:
echo "Documents" | xargs ls

El personaje de la pipa |
está canalizando lo que venga antes de eso como STDIN para xargs
.
Puedes ver eso xargs
lee mi carpeta Documentos sin problemas. Este es solo un ejemplo de las capacidades del xargs
mando.
Mientras que la xargs
El comando se puede usar en varias operaciones de línea de comando, es muy útil cuando se usa con el find
mando. En este artículo, analizamos algunos ejemplos útiles para comprender cómo xargs
y find
se pueden utilizar juntos.
Operaciones que involucran varios archivos
Suponga que desea copiar el contenido de «ref.txt» a todos los archivos de texto presentes en un directorio. Si bien la tarea puede requerir que ejecute varios comandos, el xargs
comando, junto con el find
comando, lo hace simple. Tengo un par de directorios de prueba. Uno tiene «test0.txt», que contiene texto, y el otro directorio tiene otros 10 archivos de prueba sin texto en ellos. Si quisiera tomar el contenido de test0.txt
y copiar eso al resto de los archivos de texto en los otros directorios, ejecutaría el siguiente comando:
find ./test-dir1/ -name "*.txt" | xargs -n1 cp test0.txt

Para comprender el comando que se muestra arriba, dividámoslo en dos partes.
La primera parte es find ./test-dir1/ -name "*.txt"
, que busca todos los archivos .txt presentes en el directorio «test-dir1». Puede especificar cualquier directorio aquí.
La segunda parte, xargs -n1 cp test.txt
, tomará el resultado del primer comando (los nombres de archivo resultantes) y lo entregará al cp
(copiar) comando uno por uno. Tenga en cuenta que el -n
La opción es crucial aquí, ya que instruye xargs
utilizar un argumento por ejecución.
Cuando se combinan, el comando completo copiará el contenido de «test0.txt» a todos los archivos .txt en el directorio.

Operaciones que involucran una gran cantidad de argumentos
Una de las principales ventajas de usar xargs
es su capacidad para manejar una gran cantidad de argumentos. Por ejemplo, al eliminar una gran cantidad de archivos de una sola vez, el rm
el comando a veces fallaba con un «Lista de argumentos demasiado larga» error. Eso es porque simplemente no podía manejar una lista tan larga de argumentos. Este suele ser el caso cuando tiene demasiados archivos en la carpeta que desea eliminar.
Supongamos que tiene 75 archivos PDF y recibe un error al intentar eliminarlos.

Esto se puede solucionar fácilmente con xargs
. Para eliminar todos estos archivos, use el siguiente comando:
find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f

Operaciones que involucran la búsqueda de patrones
Los desarrolladores de software y los administradores de sistemas realizan muchas búsquedas de patrones mientras trabajan en la línea de comandos. Por ejemplo, un desarrollador puede querer echar un vistazo rápido a los archivos del proyecto que modifican una variable en particular, o un administrador del sistema puede querer ver los archivos que usan un parámetro de configuración del sistema en particular. En estos escenarios, xargs
, junto con find
y grep
, te facilita las cosas.
Por ejemplo, para buscar todos los archivos «.txt» que contienen la cadena «maketecheasier», ejecute el siguiente comando:
find ./ -name "*.txt" | xargs grep "maketecheasier"
Aquí está la salida que produjo el comando en mi sistema.

Operaciones de corte / copia
Xargs
, junto con find
comando, también se puede utilizar para copiar o mover un conjunto de archivos de un directorio a otro. Por ejemplo, para mover todos los archivos de texto que tienen más de 10 minutos del directorio actual al directorio anterior, use el siguiente comando:
find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../
El -I
La opción de línea de comando es utilizada por el xargs
comando para definir una cadena de reemplazo que se reemplaza con nombres leídos de la salida del find
mando. Aquí la cadena de reemplazo es {}
, pero podría ser cualquier cosa. Por ejemplo, puede usar «archivo» como una cadena de reemplazo.
find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./practice
Cómo decirle a xargs cuándo dejar de fumar
Suponga que desea enumerar los detalles de todos los archivos .txt presentes en el directorio actual. Como ya se explicó, se puede hacer fácilmente usando el siguiente comando:
find . -name "*.txt" | xargs ls -l
Pero hay un problema: el xargs
comando ejecutará el ls
comando incluso si el find
El comando no encuentra ningún archivo .txt. Lo siguiente es un ejemplo.

Entonces puede ver que no hay archivos .txt en el directorio, pero eso no se detuvo xargs
de ejecutar el ls
mando. Para cambiar este comportamiento, use el -r
opción de línea de comando:
find . -name "*.txt" | xargs -r ls -l
Conclusión
Aunque me he concentrado aquí en usar xargs
con find
, también se puede utilizar con muchos otros comandos. Si tiene varios comandos complejos que necesita ejecutar, xargs
es una herramienta muy útil.
Si disfrutó de nuestro artículo sobre cómo usar el xargs
en Linux, asegúrese de revisar algunos de nuestros otros contenidos de Linux, como nuestras guías para corregir el error «no queda espacio en el dispositivo» o acelerar Ubuntu.