एक फ़ाइल को कई स्थानों पर स्कैन करें


28

क्या आप scpएक ही कमांड में कई स्थानों पर फ़ाइल कर सकते हैं ?

उदाहरण के लिए:

scp file.txt user@ip-1.com:, user@ip2.com:

या फिर बैश स्क्रिप्ट बनाने के लिए यह अधिक व्यावहारिक होगा कि इसमें सभी मेजबान पहले से ही हैं और यह सिर्फ एक फाइल को तर्क के रूप में ले जाएगा?

जवाबों:


24

मान लीजिए कि आपके पास एक फ़ाइल है ( destfile.txt) user@host-वेल्यूज़ के साथ , प्रत्येक पंक्ति पर एक। तब आप इस तरह कर सकते थे:

while IFS= read -r dest; do
  scp ourfile.txt "$dest:remote/path/"
done <destfile.txt

यह काम! हालांकि अभी भी एक मुट्ठी भर बाहर टाइप करने के लिए। शायद इसे सरल बनाने का एक तरीका है।
एंड्रयू

2
@Andrew, अगर आप को बदलने forमें -loop while read dest; do, यह मानक इनपुट से पढ़ा जाएगा। इसे एक स्क्रिप्ट में डालें और destfile.txtइसे (जैसे, ./thescript.sh <destfile.txt) में फीड करें ।
कुसलानंद

मैं पूर्व कर रहा हूँ, लेकिन rsync के साथ और मेरे कुछ नोड्स अद्यतन नहीं कर रहे हैं। कोई विचार क्यों?
सउब्रीक्वेट

7

समानांतर-एसपीपी (n) (t) के लिए एक नौकरी की तरह दिखता है - यह एक आदेश का एक सेट लागू करता है जो एक ही बार में कई सिस्टम पर scp कमांड चलाने की अनुमति देता है। यह मशीनों के एक सेट के समानांतर फाइलों की प्रतिलिपि बनाने की अनुमति देगा।


4
cat file.txt | tee >(ssh user@ip1.com "cat > file.txt") \
                   >(ssh user@ip2.com "cat > file.txt")

tar cz file1 file2 file3 | tee >(ssh user@ip1.com "tar xz") \
                               >( ... )

0

एक अन्य विकल्प (और एक लाइनर) इसके बजाय प्रत्येक लक्ष्य नोड से कनेक्ट करने के लिए pdsh का उपयोग करने के लिए होगा और वहां से प्राप्त करने के लिए ट्रिगर करेगा:

pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile

इस कोर्स के लिए एक और जानकारी (स्थानीय होस्ट) और अलग-अलग उपयोगकर्ता अधिकारों की आवश्यकता होती है, लेकिन आप फ़ाइल को पढ़ने में अप्रत्यक्ष रूप से उपयोग करने से बचते हैं।


0

यहां एक लाइन शेल स्क्रिप्ट के साथ एक और विकल्प है।

cscp.sh 20337.patch < hosts.txt

यह दो फ़ाइलों का उपयोग करता है, एक लूप के लिए, और एक सर्वर होस्ट सूची के लिए। यह $1सीएलआई से एससीपी के फाइलनाम के रूप में पहले पैरामीटर के लिए पढ़ता है

cscp.sh

#!/bin/bash
while read host; do
  scp $1 ${host}:
done

hosts.txt

project-prod-web1
project-prod-web2
project-prod-web3

प्रयोग

फ़ाइल को कई होस्टों में कॉपी करें:

cscp.sh file < hosts

0

यदि आपके पास कई सर्वरों के लिए एक सुसंगत नामकरण सम्मेलन चल रहा है, तो आप कुछ साफ कर सकते हैं जैसे:

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.