
Los xargs
La utilidad le permite construir y ejecutar comandos desde la entrada estándar. Suele utilizarse en combinación con otros comandos mediante canalización.
Con xargs
, puede proporcionar una entrada estándar como argumento para utilidades de línea de comandos como mkdir
y rm
.
En este tutorial, cubriremos los conceptos básicos del uso de xargs
comando.
Cómo usar Linux xargs
Comando #
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 de xargs
El comando es el siguiente:
xargs [OPTIONS] [COMMAND [initial-arguments]]
El ejemplo más básico del uso de xargs
sería pasar varias cadenas separadas con espacios en blanco usando una tubería a xargs
y ejecute 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 touch
El comando se ejecuta para cada argumento, creando tres archivos. Esto es lo mismo que si ejecutara:
touch file1 file2 file3
Cómo ver el comando y solicitar el número de usuario
Para imprimir el comando en la terminal antes de ejecutarlo use -t
(--verbose
) opción:
echo "file1 file2 file3" | xargs -t touch
touch file1 file2 file3
Si desea obtener un aviso para ejecutar cada comando antes de ejecutarlo, use -p
(--interactive
) opción:
echo "file1 file2 file3" | xargs -p touch
Escribe 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 #
De forma predeterminada, el número de argumentos pasados al comando está determinado por el límite del sistema.
El -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 agotar todos los argumentos.
En el siguiente ejemplo, la cantidad de argumentos que se leen de la entrada estándar está limitada a 1.
echo "file1 file2 file3" | xargs -n 1 -t touch
Como puede ver en el resultado detallado 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 varios comandos con xargs
, use el -I
opción. Funciona definiendo un replace-str
después del -I
opción y todas las apariciones de replace-str
se reemplazan con el argumento pasado a xargs.
Los siguientes xargs
ejemplo ejecutará dos comandos, primero creará los archivos usando touch
, y luego listará los archivos con el ls
comando:
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 #
Utilice el -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 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 una entrada estándar. Para hacerlo, use -a
(--arg-file
) seguido del nombre del archivo.
En el siguiente ejemplo, xargs
El comando leerá el ips.txt
archivar y hacer ping a cada dirección IP.
8.8.8.8
1.1.1.1
También estamos usando -L 1
opción, que instruye a xargs
para leer una línea a la vez. Si se omite esta opción xargs
pasará todas las direcciones IP a un solo ping
comando.
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 find
dominio. Puedes 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 función find -print0
. opción, lo que hace que find
para imprimir el nombre completo del archivo seguido de un carácter nulo. Esta salida puede ser interpretada correctamente por xargs
usando el -0
, (--null
) opción.
En el siguiente ejemplo, find
imprimirá los nombres completos de todos los archivos dentro de /var/www/.cache
directorio y xargs
pasará las rutas de archivo al rm
comando:
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 a xargs
comando, y hará el recorte:
echo " Long line " | xargs
Long line
Esto puede ser útil cuando se comparan cadenas en scripts de shell.
#!/bin/bash
VAR1=" Linuxize "
VAR2="Linuxize"
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; 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 crear y ejecutar comandos.
Para obtener información más detallada sobre cada xargs
opción, lea la página de manual de xargs.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.