একাধিক লোকেশনে একটি ফাইল স্ক্র্যাপ করুন


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
@ অ্যান্ড্রু, আপনি যদি লুপটি পরিবর্তন করেন forতবে while read dest; doএটি স্ট্যান্ডার্ড ইনপুট থেকে পড়বে। এটি একটি স্ক্রিপ্টে রাখুন এবং এতে ফিড দিন destfile.txt(যেমন, ./thescript.sh <destfile.txt)।
কুসালানন্দ

আমি প্রাক্তনটি করছি, তবে আরএসসিএনসি এবং আমার কিছু নোড আপডেট করছে না। কোন ধারণা কেন?
সৌরবকেট

7

সমান্তরাল- scp (n) (টি) এর জন্য একটি কাজের মতো মনে হচ্ছে - এটি কমান্ডের একটি সেট প্রয়োগ করে যা একাধিক সিস্টেমে একসাথে 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 -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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.