OSXのxargs -dの置き換え


22

Linuxでは、次のように連続した名前の4つの異なるサーバーに対してコマンドxargs -d,をすばやく実行できhostnameます。

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

OSX xargsコマンドはdelimiterパラメーターをサポートしていないようです。異なる形式のecho、または他のコマンドラインユーティリティを使用して同じ結果を達成できますか?

回答:


11

どうですか:

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

からman xargs

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

1
値にスペース、改行、またはタブを含めることができる場合、のようなものを使用できますprintf 'a\0a' | xargs -0 -n1 echo
Lri

44

または、HomebrewとGNU パッケージを使用していつでもGNU xargsをインストールできます。findutils

Homebrewをインストールします。

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

指示に従ってください。次に、findutilsをインストールします。

brew install findutils

これによりGNU xargsas が得gxargsられ、GNU / Linuxで慣れ親しんだ構文を使用できます。同じことは、OS X上で異なるBSDの同等物を持つgfindor glocateやなどのfindutilsパッケージにある他の基本的なコマンドにも当てはまりますgupdatedb


ありがとうございました!これを行った後、.zshrc(インストールの出力で説明されているように)パスを追加したため、gプレフィックスを使用する必要はありません。
非同期、

2

並列で実行する場合は、GNU Parallelを使用します。

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

1

trOSXで次のようにコンマを新しい行に変換し、xargsを使用して各アイテムを列挙することもできます。

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.