Jawaban:
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
for
-loop menjadi while read dest; do
, itu akan membaca dari input standar. Masukkan ke dalam skrip dan masukkan destfile.txt
ke dalamnya (misalnya, ./thescript.sh <destfile.txt
).
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.
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 $1
untuk 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