我们远程一般拷贝数据都是创建了共享秘钥,这样拷贝的话就不用输入密码了,具体可以参考我前面的文章”Linux 下实现SSH互信--http://gaowenlong.blog.51cto.com/451336/1856951”;

我们将通过脚本获取LOCALBAKDIR目录下的文件的最后一下修改时间,将最新的修改时间的问题远程拷贝到RMT_HOST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/bash
LOCALBAKDIR= /OAFS/WEAVER_BACKUP
RMTRESTDIR= /OAFS
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD= "$(which ssh) $RMT_USER@$RMT_HOST"
#function is_alive  判断远程计算机是否通信正常
function  is_alive() {
` which  ping ` -c 4 $RMT_HOST > /dev/null  2>&1
if  "$?"  - ne  0 ];  then
echo  2
else
echo  0
fi
}
function  mktmpdir() {
$RMT_CMD  mkdir  -p  /tmp/OAFS
}
function  rmvtmpdir() {
$RMT_CMD  rm  -rf  /tmp/OAFS/ *
}
function  get_last_targz() {
echo  $( ls  -lt $LOCALBAKDIR |  awk  { 'print $9' } | grep  - v  ^$ | head  -n 1)
}
function  copy() {
yum  install  -y openssh-clients > /dev/null  2>&1
$RMT_CMD yum  install  -y openssh-clients > /dev/null  2>&1
scp  -q $LOCALBAKDIR/$(get_last_targz) $RMT_USER@$RMT_HOST: /tmp/OAFS/
}
if  "$(is_alive)"  - eq  0 ];  then
mktmpdir
copy
rmvtmpdir
else
echo  "$RMT_HOST can not be accessed via port 22, please check"
fi

最后我们通过脚本获取LOCALBAKDIR目录下的文件名来判断是否为最新的文件(文件名是以日期格式命名),将最新的修改时间的问题远程拷贝到RMT_HOST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
LOCALBAKDIR= /OAFS/WEAVER_BACKUP
RMTRESTDIR= /OAFS
RMT_HOST=192.168.6.38
RMT_USER=root
RMT_CMD= "$(which ssh) $RMT_USER@$RMT_HOST"
function  is_alive() {
` which  ping ` -c 4 $RMT_HOST > /dev/null  2>&1
if  "$?"  - ne  0 ];  then
echo  2
else
echo  0
fi
}
function  mktmpdir() {
$RMT_CMD  mkdir  -p  /tmp/OAFS
}
function  rmvtmpdir() {
$RMT_CMD  rm  -rf  /tmp/OAFS/ *
}
function  get_last_targz() {
echo  $( ls  $LOCALBAKDIR |  awk  '{match($0,/.{4}-.{2}-.{2}/,a);b[a[0]]=$0;y=a[0]>y?a[0]:y}END{print b[y]}' )
}
function  copy() {
yum  install  -y openssh-clients > /dev/null  2>&1
$RMT_CMD yum  install  -y openssh-clients > /dev/null  2>&1
scp  -q $LOCALBAKDIR/$(get_last_targz) $RMT_USER@$RMT_HOST: /tmp/OAFS/
}
if  "$(is_alive)"  - eq  0 ];  then
mktmpdir
copy
rmvtmpdir
else
echo  "$RMT_HOST can not be accessed via port 22, please check"
fi