Yanıtlar:
Diyelim ki her satırda -values destfile.txt
olan bir dosya ( ) var user@host
. O zaman şöyle yapabilirsin:
while IFS= read -r dest; do
scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
for
-loop içine değiştirirseniz, while read dest; do
standart girişten okuyacak. Bir betiğe koyun ve destfile.txt
içine besleyin (örneğin, ./thescript.sh <destfile.txt
).
Başka bir alternatif (ve bir astar) bunun yerine her hedef düğüme bağlanmak için pdsh kullanmak ve oradan bir kazanımı tetiklemek olacaktır:
pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile
Bu, elbette bir bilgi daha (yerel ana bilgisayar) ve farklı kullanıcı haklarını gerektirir, ancak dosyayı basmaktan kaçınmak ve dolaylı kullanmaktan kaçının.
İşte bir satır kabuk betiği ile başka bir seçenek.
cscp.sh 20337.patch < hosts.txt
Biri döngü için diğeri sunucu ana bilgisayar listesi için iki dosya kullanır. $1
İlk parametre için CLI'den dosya adı olarak SCP'ye okur
cscp.sh
#!/bin/bash
while read host; do
scp $1 ${host}:
done
Host.txt
project-prod-web1
project-prod-web2
project-prod-web3
kullanım
Dosyayı birden fazla ana bilgisayara kopyala:
cscp.sh file < hosts