English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Comando xargs de Linux

Comandos de Linux completos

xargs (abreviado en inglés: eXtended ARGuments) es un filtro para pasar parámetros a los comandos y también una herramienta para combinar múltiples comandos.

xargs puede convertir los datos de la tubería o la entrada estándar (stdin) en parámetros de línea de comandos, y también puede leer datos desde la salida del archivo.

xargs también puede convertir la entrada de texto de una o varias líneas en otro formato, por ejemplo, de varias líneas a una línea, y de una línea a varias líneas.

El comando predeterminado de xargs es echo, lo que significa que la entrada pasada al xargs a través del pipeline contendrá saltos de línea y espacios en blanco, pero después del procesamiento de xargs, los saltos de línea y los espacios en blanco se reemplazarán por espacios.

xargs es un comando poderoso que puede capturar la salida de un comando y luego pasársela a otro comando.

La razón por la que se puede usar este comando es que muchos comandos no admiten el pipeline | para pasar parámetros, y en el trabajo diario hay esta necesidad, por lo que surgió el comando xargs, por ejemplo:

find /sbin -perm +700 |ls -l # Este comando es incorrecto
find /sbin -perm +700 |xargs ls -l # Esto es lo correcto

xargs se utiliza generalmente con el pipeline.

Formato de comando:

somecommand |xargs -item command

Parámetros:

  • -a file leer desde el archivo como stdin

  • -e flag, preste atención, a veces puede ser-E, el flag debe ser un símbolo separado por espacios, cuando xargs analiza un símbolo que contiene flag, se detiene.

  • -p Cada vez que se ejecuta un argumento, se pregunta al usuario.

  • -n num Añade el número después de num para indicar la cantidad de argumentos que usa el comando en cada ejecución, el valor predeterminado es usar todos.

  • -t significa que primero imprime el comando y luego lo ejecuta.

  • -i o-Yo, esto depende del soporte de linux, toma cada nombre de elemento de xargs, generalmente asigna uno por una línea, se puede usar {}.

  • -r no-run-if-empty Cuando la entrada de xargs está vacía, detén xargs y no ejecutarlo.

  • -s num Número máximo de caracteres en la línea de comandos, se refiere al número máximo de caracteres en la línea de comandos del comando que sigue a xargs.

  • -L num Lee num líneas de la entrada estándar y las envía al comando command.

  • -l  igual -L.

  • -d delim delimitador, el delimitador predeterminado de xargs es la nueva línea, el delimitador de argumentos es el espacio, aquí se cambia el delimitador de xargs.

  • -x salida, principalmente utilizado con-s usar...

  • -P modificar el número máximo de procesos, el valor predeterminado es1, cuando es 0, significa que toma tantos como pueda, este ejemplo no lo pensé, ¿debería usarlo a menudo, verdad?

Ejemplo en línea

xargs se utiliza como herramienta de sustitución, lee los datos de entrada, los re-formatea y los salida.

Definir un archivo de prueba, que contiene datos de texto en múltiples líneas:

# cat test.txt
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

Entrada de múltiples líneas y salida de una línea:

# cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z

-Uso de la opción n para salida de múltiples líneas:

# cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

-La opción d puede definir un delimitador personalizado:

# echo "nameXnameXnameXname" | xargs -dX
name name name name

combinado -Uso de la opción n:

# echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name

Lee stdin, transmite los parámetros formateados al comando

Supongamos que un comando es sk.sh y un archivo que guarda los parámetros arg.txt:

#!/bin/bash
#sk.sh contenido de comando, imprime todos los parámetros.
echo $*

Contenido del archivo arg.txt:

# cat arg.txt
aaa
bbb
ccc

una opción de xargs -Yo, uso -I especifica una cadena de reemplazo {} que se reemplazará durante la extensión de xargs, cuando}} -I se utiliza con xargs, cada comando de parámetro se ejecutará una vez:

# cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l

Copiar todos los archivos de imágenes a /data/En el directorio images:

ls *.jpg | xargs -n1 -I {} cp {} /data/images

Uso de xargs con find

Al eliminar muchos archivos con rm, podrías recibir un mensaje de error:/bin/rm Argument list too long. Usa xargs para evitar este problema:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 Utiliza \0 como delimitador.

Contar el número de líneas de todos los archivos php en un directorio de código fuente:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

Buscar todos los archivos jpg y comprimirlos:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

Aplicaciones adicionales de xargs

Si tienes un archivo que contiene muchas URL que deseas descargar, puedes usar xargs para descargar todos los enlaces:

# cat url-list.txt | xargs wget -c

Comandos de Linux completos