Ответы:
Допустим, у вас есть файл ( destfile.txt
) с user@host
-values, по одному в каждой строке. Тогда вы можете сделать так:
while IFS= read -r dest; do
scp ourfile.txt "$dest:remote/path/"
done <destfile.txt
for
-loop на while read dest; do
, он будет читать со стандартного ввода. Поместите это в сценарий и введите destfile.txt
в него (например, ./thescript.sh <destfile.txt
).
Другой альтернативой (и однострочником) было бы вместо этого использовать pdsh для подключения к каждому целевому узлу и инициировать получение оттуда:
pdsh -w^destfile.txt scp hostname:/path/to/file /path/to/destfile
Это, конечно, требует еще одну информацию (локальный хост) и разные права пользователя, но вы избегаете циклического использования bash и использования косвенного обращения для чтения файла.
Вот еще один вариант, с однострочным сценарием оболочки.
cscp.sh 20337.patch < hosts.txt
Он использует два файла, один для цикла и один для списка хостов сервера. Он читает $1
для первого параметра из CLI в качестве имени файла для SCP
cscp.sh
#!/bin/bash
while read host; do
scp $1 ${host}:
done
HOSTS.TXT
project-prod-web1
project-prod-web2
project-prod-web3
использование
Скопируйте файл на несколько хостов:
cscp.sh file < hosts