ओएसएक्स में xargs -d के लिए प्रतिस्थापन


22

लिनक्स में, आप क्रमिक नाम के साथ चार अलग-अलग सर्वरों के खिलाफ कमांड xargs -d,को जल्दी से चलाने के लिए उपयोग कर सकते हैं hostname:

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

ऐसा लगता है कि OSX xargs कमांड सीमांकक पैरामीटर का समर्थन नहीं करता है। क्या आप एक अलग स्वरूपित 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
लारी

45

वैकल्पिक रूप से, आप हमेशा होमब्रे और जीएनयू पैकेज के xargsमाध्यम से जीएनयू स्थापित कर सकते हैं ।findutils

होमब्रे स्थापित करें:

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

निर्देशों का पालन करें। तो फिर findutils स्थापित करें:

brew install findutils

यह आपको जीएनयू दे देंगे xargsके रूप में gxargs, और आप वाक्य रचना आप जीएनयू / लिनक्स से के आदी रहे हैं का उपयोग कर सकते हैं। एक ही findutils में पाया अन्य बुनियादी आज्ञाओं जैसे पैकेज के लिए चला जाता है gfindया glocateया gupdatedbहै, जो ओएस एक्स पर विभिन्न बीएसडी समकक्षों है


धन्यवाद! मैंने ऐसा किया, फिर मेरे लिए पथ जोड़ा .zshrc(जैसा कि स्थापना आउटपुट में बताया गया है) इसलिए मुझे gउपसर्ग का उपयोग नहीं करना पड़ेगा ।
१ '

2

यदि आप इसे समानांतर में चलाना चाहते हैं, तो GNU समानांतर का उपयोग करें:

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

1

आप trकॉमिक्स को नई लाइनों में बदलने के लिए OSX का उपयोग कर सकते हैं और xargs का उपयोग प्रत्येक आइटम के माध्यम से गणना करने के लिए निम्नानुसार कर सकते हैं:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.