서버 목록의 파일을 특정 원격 서버로 복사

서버 목록의 파일을 특정 원격 서버로 복사

3개의 원격 서버가 있고 원본 서버에서 해당 서버로 파일을 복사해야 합니다. 각 서버에 대해 동일한 명령을 여러 번 실행하는 대신 목록에서 하나의 서버를 선택하고 해당 서버로 파일을 전송할 수 있습니까?

내 목표는 각 서버에 대해 개별적으로 동일한 코드를 작성하지 않는 것입니다.

예를 들어:

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

마찬가지로, 다른 옵션을 선택하면 파일이 해당 서버에 복사되어야 합니다.

이것은 한 서버에서 파일을 복사하는 코드입니다.

#!/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

관련 정보