scp satu file ke beberapa lokasi

28

Bisakah Anda scpfile ke beberapa lokasi dalam perintah yang sama?

Sebagai contoh:

scp file.txt [email protected]:, [email protected]:

Atau akan lebih praktis untuk membuat skrip bash yang sudah memiliki semua host di dalamnya dan itu hanya akan mengambil file sebagai argumen?

Andrew
sumber

Jawaban:

24

Katakanlah Anda memiliki file ( destfile.txt) dengan user@host-nilai, satu di setiap baris. Maka Anda bisa melakukan ini:

while IFS= read -r dest; do
  scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
Kusalananda
sumber
Ini bekerja! Masih sedikit untuk mengetik. Mungkin ada cara untuk menyederhanakannya.
Andrew
2
@Andrew, jika Anda mengubah for-loop menjadi while read dest; do, itu akan membaca dari input standar. Masukkan ke dalam skrip dan masukkan destfile.txtke dalamnya (misalnya, ./thescript.sh <destfile.txt).
Kusalananda
Saya melakukan yang pertama, tetapi dengan rsync dan beberapa node saya tidak memperbarui. Ada yang tahu kenapa?
Soubriquet
7

Tampak seperti pekerjaan untuk parallel-scp (n) (t) - ini mengimplementasikan seperangkat perintah yang memungkinkan perintah scp dijalankan di banyak sistem sekaligus. Ini akan memungkinkan untuk menyalin file secara paralel ke satu set mesin.

AnonymousLurker
sumber
0

Alternatif lain (dan satu-liner) adalah sebagai gantinya menggunakan pdsh untuk terhubung ke setiap node target dan memicu get dari sana:

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

Ini tentu saja memerlukan satu informasi lagi (host lokal) dan hak pengguna yang berbeda, tetapi Anda menghindari perulangan di bash dan menggunakan tipuan untuk membaca file.

Rick Moritz
sumber
0

Berikut opsi lain, dengan skrip shell satu baris.

cscp.sh 20337.patch < hosts.txt

Ia menggunakan dua file, satu untuk loop, dan satu untuk daftar host server. Bunyinya $1untuk parameter pertama dari CLI sebagai nama file ke SCP

cscp.sh

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

hosts.txt

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

Pemakaian

Salin file ke beberapa host:

cscp.sh file < hosts
David Thomas
sumber
0

Jika Anda memiliki konvensi penamaan yang konsisten untuk beberapa server, Anda dapat melakukan sesuatu yang rapi seperti:

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
akta02392
sumber