tek bir dosyayı birden fazla yere tara


28

scpAynı komutla birden fazla konuma dosya verebilir misiniz ?

Örneğin:

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

Ya da zaten içinde bulunan tüm ana bilgisayarları içeren ve sadece argüman olarak bir dosya alabilecek bir bash betiği oluşturmak daha mı pratik olurdu?

Yanıtlar:


24

Diyelim ki her satırda -values destfile.txtolan bir dosya ( ) var user@host. O zaman şöyle yapabilirsin:

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

Bu çalışıyor! Yine de yazmak için hala bir avuç. Belki de bunu basitleştirmenin bir yolu vardır.
Andrew,

2
@And, Eğer for-loop içine değiştirirseniz, while read dest; dostandart girişten okuyacak. Bir betiğe koyun ve destfile.txtiçine besleyin (örneğin, ./thescript.sh <destfile.txt).
Kusalananda

Eski yapıyorum, ancak rsync ve bazı düğümlerim güncellenmiyor. Neden bir fikrin var mı?
Soubriquet

7

Paralel scp (n) (t) için bir işe benziyor - bu, scp komutlarının bir kerede birden fazla sistemde çalışmasına izin veren bir dizi komut uygular. Bir dizi makineye paralel olarak dosyaların kopyalanmasına izin verecektir.


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

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.


0

İş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

0

Birden fazla sunucu için tutarlı bir adlandırma kuralınız varsa, aşağıdaki gibi temiz bir şey yapabilirsiniz:

for x in st1-abc-{11..20}.acme.com; do scp filez.tgz user@$x; done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.