Risposte:
Supponiamo che tu abbia un file ( destfile.txt
) con user@host
-valori, uno su ogni riga. Quindi potresti fare così:
while IFS= read -r dest; do
scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
for
-loop in while read dest; do
, leggerà dallo standard input. Inseriscilo in uno script e destfile.txt
inseriscilo (ad es ./thescript.sh <destfile.txt
.).
Un'altra alternativa (e un one-liner) sarebbe invece usare pdsh per connettersi a ciascun nodo target e innescare un get da lì:
pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile
Ciò ovviamente richiede ulteriori informazioni (l'host locale) e diritti utente diversi, ma si evita di eseguire il looping in bash e di utilizzare il riferimento indiretto per leggere il file.
Ecco un'altra opzione, con uno script shell di una riga.
cscp.sh 20337.patch < hosts.txt
Utilizza due file, uno per il ciclo e uno per l'elenco degli host del server. Legge $1
il primo parametro dalla CLI come nome file in SCP
cscp.sh
#!/bin/bash
while read host; do
scp $1 ${host}:
done
hosts.txt
project-prod-web1
project-prod-web2
project-prod-web3
uso
Copia il file su più host:
cscp.sh file < hosts