Cómo usar los comandos Bash xargs

“xargs es un comando bash que permite la ejecución de múltiples comandos en la misma línea. Ya sea que los comandos tomen parámetros o argumentos como entrada, pueden ejecutarse en la misma línea cuando se combinan con xargs. Con xargs, puede crear y ejecutar varios comandos a través de la entrada estándar, ya que xargs puede tomar una entrada y convertirla en un argumento de comando para usar en el siguiente comando”.

Para ayudarlo a comprender xargs y cómo puede usarlo, este artículo le dará múltiples ejemplos del uso del comando xargs. ¡Echar un vistazo!

Cómo usar el comando xargs

La forma en que use el comando xargs depende de lo que quiera lograr. Si usa xargs sin entrada, hará eco de todo lo que escriba en la terminal una vez que presione CTRL + D

Manejo de archivos y directorios usando xargs

Si desea encontrar todos los archivos con una extensión dada, puede usar xargs. Veamos un ejemplo del uso de ls con xargs para archivos de texto.

$ encontrar . -nombre ‘*.txt’ -tipo f | xargs ls

 

En el comando anterior, estamos usando el comando de búsqueda para buscar archivos en el directorio actual que tengan una extensión .txt.

aquí está la salida

Si desea eliminar todos los archivos que encontramos usando el comando anterior, puede usar el comando a continuación.

$ encontrar . -nombre ‘*.txt’ -tipo f | xargs rm -f

 

El indicador -t es para verbose.

Suponga que desea crear varios directorios donde está agregando la entrada desde la entrada estándar. Podríamos combinar mkdir con echo, como en el siguiente ejemplo.

$ echo ‘linux1 tech2 dir3 dir2’ | xargs mkdir

 

Si quisiera eliminar todos los directorios del directorio actual, podría usar xargs, como se muestra a continuación.

$ encontrar . -tipo d | xargs rm -r

 

Entrada de lectura de Xargs desde un archivo

Usando el indicador -a , puede indicar a xargs que lea elementos de un archivo, como en el caso a continuación.

Con el mismo ejemplo, podemos demostrar cómo combinar múltiples comandos usando xargs. Para eso, use la bandera -I .

Por ejemplo, podríamos usar el siguiente comando para leer el contenido de un archivo y crear un directorio usando cada cadena del archivo.

$ gato 1 .txt | xargs -I % mkdir %

 

Puede llevar el comando más allá para hacer eco del contenido del archivo mientras crea el directorio agregando el comando echo, como se muestra a continuación.

$ gato 1 .txt | xargs -I % sh -c ‘echo %; mkdir %’

 

Usando xargs con grep

El comando grep se usa para hacer coincidir patrones, y cuando desea buscar una cadena dada en varios archivos, puede usar xargs para combinar find con grep, donde la salida de find se convertirá en la entrada para ser utilizada por grep .

Aquí hay un ejemplo donde encontramos todos los archivos de texto que contienen la cadena «linuxhint».

$ encontrar . -nombre ‘*.txt’ | xargs grep ‘linuxhint’

 

Limitación de salida por línea

Suponga que desea leer el contenido de un archivo. Puede limitar el número de salidas para cada línea usando la opción -n .

Tengamos un ejemplo de impresión de números en un rango dado usando el comando seq y limitemos la salida por línea a 4

$ secuencia 1 30 | xargs -n 4

 

Especificación del delimitador

De forma predeterminada, xargs asume un espacio en blanco como delimitador. Sin embargo, si necesita usar otro delimitador, debe usar el comando -d seguido del delimitador.

Aquí hay un ejemplo que usa dos puntos como delimitador cuando trabaja con un archivo para leer su contenido y crear directorios usando las cadenas en el archivo.

Aquí está el contenido de nuestro archivo.

Ahora, ejecutemos el siguiente comando.

$ nombres de gatos.txt | xargs -d: | xargs -t mkdir

 

La salida sería:

El delimitador nulo

Si intentáramos usar xargs con archivos con espacios en blanco en los nombres, arrojaría resultados incorrectos ya que xargs usa espacios en blanco como delimitador. En tal caso, debemos usar el indicador -0 , que indica a xargs que use un delimitador nulo. Además, necesitamos el indicador -print0 , que find utiliza para indicar una lista separada por valores nulos.

Por ejemplo, supongamos que tenemos los archivos de imagen a continuación.

Si intentáramos eliminar todos los archivos usando el siguiente comando, xargs solo imprimiría los archivos de imagen sin espacio en su nombre, como se muestra a continuación.

$ encontrar . -nombre ‘*.png’ -tipo f | xargs rm -f

 

Para superar esto, necesitamos usar el indicador -0 y -print0.

$ encontrar . -nombre ‘*.png’ -tipo f -print0 | xargs -0 rm -f

 

Podemos comprobar que hemos eliminado con éxito todos los archivos.

Conclusión

Esta guía ha cubierto el comando bash xargs en profundidad, dando ejemplos de cómo usarlo para lograr varios aspectos. Haciendo referencia a los ejemplos presentados, puede implementar xargs en su extremo para realizar varias tareas. Además, consulte la página de manual de xargs para obtener más detalles de uso.