サーバーリストのファイルを特定のリモートサーバーにコピーする

サーバーリストのファイルを特定のリモートサーバーにコピーする

3つのリモートサーバーがあり、ソースサーバーからそのサーバーにファイルをコピーする必要があります。各サーバーに対して同じコマンドを複数回実行するのではなく、リストから1つのサーバーを選択してそのサーバーにファイルを転送できますか?

私の目標は、サーバーごとに個別に同じコードを書くことです。

たとえば、

A = source server
B = remote server 1
C = remote server 2
D = remote server 3
(there may be more remote servers in future)

ファイルをコピーするサーバー(B / C / D)を入力してください。

コマンドラインでBを選択すると、次のコマンドが実行されます。

scp xyz.txt user@remoteserver2:/home 
scp jkl.txt user@remoteserver2:/home

同様に、別のオプションを選択した場合は、ファイルをそのサーバーにコピーする必要があります。

これは1つのサーバーからファイルをコピーするコードです。

#!/bin/sh
today=`date '+%Y%m%d'`;
min_date=`date -d "$today -14days" +%Y%m%d`
max_date=`date -d "$today -1days" +%Y%m%d`
read -p "Enter the date you want input files for [yyyymmdd]: " user_date
udate=$user_date
if [[ $user_date -ge $min_date && $user_date -lt $today ]]
then
  ssh user@server2 mkdir -p /data/${udate}_inputfiles/{f1,f2,f3,f4,f5,f6}
   echo "Starting to copy files"
    cd /homepath1
    scp *${udate}* user@server2:/data/${udate}_inputfiles/f1
    scp *${udate}* user@server2:/data/${udate}_inputfiles/f2
    scp *${udate}* user@server2:/data/${udate}_inputfiles/f3
    scp *${udate}* user@server2:/data/${udate}_inputfiles/f4
    scp *${udate}* user@server2:/data/${udate}_inputfiles/f5
    scp *${udate}* user@server2:/data/${udate}_inputfiles/f6
    
else
    echo "Entered date is invalid: Please specify date between $min_date and $max_date"
fi    

ベストアンサー1

とても簡単です。関数を書いてください。

function serverscp () {
s="$1"
ssh user@$s mkdir -p /data/${udate}_inputfiles/f{1,2,3,4,5,6}
echo "Starting copy"
cd /homepath1
scp *${udate}* user@${s}:/data/${udate}_inputfiles/f1
scp *${udate}* user@${s}:/data/${udate}_inputfiles/f2
scp *${udate}* user@${s}:/data/${udate}_inputfiles/f3
scp *${udate}* user@${s}:/data/${udate}_inputfiles/f4
scp *${udate}* user@${s}:/data/${udate}_inputfiles/f5
scp *${udate}* user@${s}:/data/${udate}_inputfiles/f6
cd $OLDPWD
}

後でスクリプトで

for tgt in server1 server2 server3 ; do
  serverscp $tgt
done

警告するテストされていないコード、確認されていないコードhttps://shellcheck.org

おすすめ記事