Androide

Comando Xargs en Linux

Comando xargs - Construir e executar linhas de comando no Linux

Comando xargs - Construir e executar linhas de comando no Linux

Tabla de contenido:

Anonim

La utilidad xargs permite construir y ejecutar comandos desde la entrada estándar. Por lo general, se usa en combinación con otros comandos a través de tuberías.

Con xargs , puede proporcionar una entrada estándar como argumento para las utilidades de línea de comandos como mkdir y rm .

En este tutorial, cubriremos los conceptos básicos del uso del comando xargs .

Cómo usar el comando xargs Linux

xargs lee los argumentos de la entrada estándar, separados por espacios en blanco o líneas nuevas, y ejecuta el comando especificado utilizando la entrada como argumentos del comando. Si no se proporciona ningún comando, el valor predeterminado es /bin/echo .

La sintaxis para el comando xargs es la siguiente:

xargs]

El ejemplo más básico de usar xargs sería pasar varias cadenas separadas con espacios en blanco usando una tubería para xargs y ejecutar un comando que usará esas cadenas como argumentos.

echo "file1 file2 file3" | xargs touch

En el ejemplo anterior, estamos canalizando la entrada estándar a xargs , y el comando touch se ejecuta para cada argumento, creando tres archivos. Esto es lo mismo que si corrieras:

touch file1 file2 file3

Cómo ver el comando y preguntar al usuario

Para imprimir el comando en el terminal antes de ejecutarlo, use la opción -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Escriba y o Y para confirmar y ejecutar el comando:

touch file1 file2 file3 ?…y

Esta opción es útil cuando se ejecutan comandos destructivos.

Cómo limitar el número de argumentos

Por defecto, el número de argumentos pasados ​​al comando está determinado por el límite del sistema.

La opción -n ( --max-args ) especifica el número de argumentos que se pasarán al comando dado. xargs ejecuta el comando especificado tantas veces como sea necesario hasta que se agoten todos los argumentos.

En el siguiente ejemplo, el número de argumentos que se leen de la entrada estándar está limitado a 1.

echo "file1 file2 file3" | xargs -n 1 -t touch

Como puede ver en la salida detallada a continuación, el comando táctil se ejecuta por separado para cada argumento:

touch file1 touch file2 touch file3

Cómo ejecutar múltiples comandos

Para ejecutar múltiples comandos con xargs , use la opción -I . Funciona definiendo un replace-str después de la opción -I y todas las apariciones de replace-str se reemplazan con el argumento pasado a xargs.

El siguiente ejemplo de xargs ejecutará dos comandos, primero creará los archivos usando la función touch y luego listará los archivos con el comando ls :

echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'

-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file2 -rw-r--r-- 1 linuxize users 0 May 6 11:54 file3

Una opción común para replace-str es % . Sin embargo, puede usar otro marcador de posición, por ejemplo, ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Cómo especificar un delimitador

Use la opción -d ( --delimiter ) para establecer un delimitador personalizado, que puede ser un solo carácter o una secuencia de escape que comience con \ .

El siguiente ejemplo que estamos usando ; como delimitador:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

Cómo leer elementos del archivo

El comando xargs también puede leer elementos de un archivo en lugar de la entrada estándar. Para hacerlo, use la opción -a ( --arg-file ) seguida del nombre del archivo.

En el siguiente ejemplo, el comando ips.txt leerá el archivo ips.txt y ips.txt ping a cada dirección IP.

ips.txt

8.8.8.8 1.1.1.1

También estamos usando la opción -L 1 , que le indica a xargs que lea una línea a la vez. Si se omite esta opción, xargs pasará todas las IP a un solo comando ping .

xargs -t -L 1 -a ips.txt ping -c 1

ping -c 1 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms… ping -c 1 1.1.1.1 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms

Usando xargs con find

xargs se usa con mayor frecuencia en combinación con el comando find . Puede usar find para buscar archivos específicos y luego usar xargs para realizar operaciones en esos archivos.

Para evitar problemas con los nombres de archivo que contienen líneas nuevas u otros caracteres especiales, utilice siempre la opción find -print0 , que hace que find imprima el nombre completo del archivo seguido de un carácter nulo. Esta salida puede ser interpretada correctamente por xargs usando la opción -0 , ( --null ).

En el siguiente ejemplo, find imprimirá los nombres completos de todos los archivos dentro del directorio /var/www/.cache y xargs pasará las rutas de los archivos al comando rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Uso de xargs para recortar caracteres de espacio en blanco

xargs también se puede usar como una herramienta para eliminar espacios en blanco de ambos lados de una cadena dada. Simplemente canalice la cadena al comando xargs , y hará el recorte:

echo " Long line " | xargs

Long line

Esto puede ser útil al comparar cadenas en scripts de shell.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Conclusión

xargs es una utilidad de línea de comandos en Linux que le permite construir y ejecutar comandos.

Para obtener información más detallada sobre cada opción de xargs , lea la página de manual de xargs.

terminal de xargs