Osx içinde xargs -d için yedek


22

Linux'ta, komutu aşağıdaki gibi sıralı adlara sahip dört farklı sunucuya xargs -d,hızlı bir şekilde çalıştırmak için kullanabilirsiniz hostname:

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

OSX xargs komutu, delimiter parametresini desteklemiyor gibi görünüyor. Aynı sonucu farklı biçimlendirilmiş echoveya başka bir komut satırı yardımcı programıyla elde edebilir misiniz ?

Yanıtlar:


11

Nasıl olur:

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

Gönderen man xargs:

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

1
Değerler boşluk, satır beslemesi veya sekme içerebilirse, benzer bir şey kullanabilirsiniz printf 'a\0a' | xargs -0 -n1 echo.
Lri

45

Alternatif olarak, GNU'yu her zaman Homebrew ve GNU paketi xargsaracılığıyla kurabilirsiniz .findutils

Homebrew'u yükleyin:

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

Talimatları takip et. Ardından findutils'i yükleyin:

brew install findutils

Bu size GNU xargsolarak verecektir gxargsve GNU / Linux'tan alışkın olduğunuz sözdizimini kullanabilirsiniz. Aynı gibi paket findutils bulunan diğer temel komutlar için gider gfindveya glocateveya gupdatedbOS X'te farklı BSD eşdeğerleri de vardır


Teşekkür ederim! Bunu yaptım, sonra öneki .zshrckullanmak zorunda kalmayacak şekilde yoluma (kurulum çıkışında açıklandığı gibi) ekledim g.
absynce

2

Paralel olarak çalışmasını istiyorsanız GNU Paralel kullanın:

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

1

Ayrıca tr, virgülleri yeni satırlara dönüştürmek için OSX'te kullanabilir ve her öğeyi aşağıdaki gibi numaralandırmak için xargs kullanabilirsiniz:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.