Reemplazo para xargs -d en osx


22

En Linux, puede usar xargs -d,para ejecutar rápidamente el hostnamecomando contra cuatro servidores diferentes con nombres secuenciales de la siguiente manera:

echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname

Parece que el comando OSX xargs no admite el parámetro delimitador. ¿Puede lograr el mismo resultado con un formato diferente echoo mediante alguna otra utilidad de línea de comandos?

Respuestas:


11

Qué tal si:

echo {1..4} | xargs -n1 -I{} ssh root@www{}.example.com hostname

De man xargs:

-n number
Set the maximum number of arguments taken from standard input for each invocation of utility.

1
Si los valores pueden contener espacios, saltos de línea o pestañas, podría usar algo como printf 'a\0a' | xargs -0 -n1 echo.
Lri

44

Alternativamente, siempre puede instalar GNU a xargstravés de Homebrew y el findutilspaquete GNU .

Instalar Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Sigue las instrucciones. Luego instale findutils:

brew install findutils

Esto le dará GNU xargscomo gxargs, y puede usar la sintaxis a la que está acostumbrado desde GNU / Linux. Lo mismo ocurre con otros comandos básicos que se encuentran en el paquete findutils, como gfindor glocateo gupdatedb, que tienen contrapartidas BSD diferentes en OS X.


¡Gracias! Hice esto, luego agregué la ruta a mi .zshrc(como se explica en la salida de instalación) para no tener que usar el gprefijo.
ausencia

2

Si desea que se ejecute en paralelo, use GNU Parallel:

parallel ssh root@www{}.example.com hostname ::: {1..4}

1

También puede usar tren OSX para convertir las comas en nuevas líneas y usar xargs para enumerar cada elemento de la siguiente manera:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.