Tutoriales

Comando xargs en Linux: compila y ejecuta comandos desde la entrada

este xargs Los comandos en Linux leen elementos de la entrada estándar y los pasan como argumentos a otro comando. Cierra la brecha entre los comandos que producen resultados y los comandos que requieren argumentos, lo que lo hace esencial para los shell pipes.

Cómo utilizar la directiva xargs en Linux

xargs Lee elementos de la entrada estándar, los divide en espacios o nuevas líneas y luego usa estos elementos como argumentos para ejecutar el comando especificado. Si no se da ninguna orden, xargs El valor predeterminado es /bin/echo.

La sintaxis es:

bashxargs [OPTIONS] [COMMAND [initial-arguments]]

Un ejemplo básico: canalice tres nombres de archivos y créelos usando el siguiente comando touch:

bashecho "file1 file2 file3" | xargs touch

esto corre touch file1 file2 file3 como una sola llamada.

Para ver el comando generado impreso en stderr antes de ejecutarlo, agregue -t (detallado):

bashecho "file1 file2 file3" | xargs -t touch

-t Escriba en stderr, no en stdout: la salida de depuración no contamina el resultado de la canalización.

Para operaciones destructivas, utilice -p (Interactivo) Requiere confirmación antes de cada comando. tipo y o Y Ejecútelo, cualquier otra cosa que desee omitir:

bashecho "file1 file2 file3" | xargs -p rm

Parámetros de control: -n, -I, -d, -L y lectura del archivo

Limitar parámetros por llamada y -n. En lugar de pasar todos los elementos a la vez, -n 1 Ejecute el comando una vez por parámetro:

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

touch Se llama tres veces. Útil cuando la directiva de destino no acepta múltiples argumentos.

Usar marcadores de posición y -I Controle exactamente dónde aparece cada parámetro en el comando. -I % definición % como reemplazo para cada aparición de str – % El contenido de la plantilla de comando se reemplaza por los parámetros actuales:

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

Esto ejecuta dos comandos con cada parámetro. sh -c. Puede utilizar cualquier cadena como marcador de posición (%, {}, ARGS).

Establecer separador personalizado y -d. Por defecto, xargs Dividir en espacios en blanco. Separar por punto y coma:

bashecho "file1;file2;file3" | xargs -d \; touch

El delimitador puede ser un solo carácter o una secuencia de escape de barra invertida, p. \n o \t.

leer del archivo y -a y procesar una fila a la vez -L 1:

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

No -L 1todas las direcciones se pasarán a un ping llamar. -L 1 Cada llamada lee una línea. diferente de -n: -n N Limite los parámetros de cada llamada independientemente de la estructura de filas; -L N Limite el número de líneas por llamada. usar -n Para entrada de una sola línea delimitada por espacios; usar -L Cuando cada artículo está en su propia línea.

xargs y búsqueda y manejo seguro de nombres de archivos especiales

Los usos más comunes son xargs y find:

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

-print0 Decir find Separe los nombres de los archivos con bytes vacíos en lugar de nuevas líneas. -0 Decir xargs Dividido por bytes vacíos en lugar de espacios.

Esta es la única combinación segura para cualquier nombre de archivo. Los espacios, las nuevas líneas, las tabulaciones y la mayoría de los demás caracteres especiales pueden aparecer legalmente en los nombres de archivos de Linux. tupla vacía (\0) es el único carácter que no se puede utilizar. El uso de cualquier otro delimitador corre el riesgo de dividir un único nombre de archivo en varias partes, lo que resulta en xargs Operando en el objetivo equivocado.

Antes de ejecutar el comando destructivo, intercambie rm -f para echo Vista previa de la lista de objetivos:

bashfind /var/www/.cache -type f -print0 | xargs -0 echo

Recorta los espacios en blanco. desde xargs El valor predeterminado es /bin/echo Cuando no se da ningún comando, actúa como un eliminador de espacios en blanco:

bashecho "  Long line " | xargs    # outputs: Long line

xargs Trate los espacios iniciales y finales como delimitadores y pase solo tokens a echoconcatenarlos con un solo espacio.

siempre uso find -print0 | xargs -0 Se utiliza para operaciones de archivos. usar -t Verifique el comando antes de ejecutarlo y -p Confirme de forma interactiva operaciones destructivas. Si tiene algún problema, deje un comentario a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba