shell批量复制脚本(rsync)【直接复制拿走】

一、rsync同步命令

scp可以实现服务器与服务器之间的数据拷贝【全量拷贝】

rsync可以实现服务器与服务器之间的数据拷贝【增量拷贝】具有速度快、避免复制相同内容和支持符号链接的优点。

rsyncscp区别:rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新,scp是把所有文件都复制。

本文使用的是rsync

安装rsync命令

sudo yum install -y rsync

 

二、复制需求确定

目前作者实例的机器有

192.168.0.191 hadoop01
192.168.0.192 hadoop02
192.168.0.193 hadoop03

需求:将hadoop01机器的软件,同步到hadoop02和hadoop03两台机器【提前配置免密登录】

 

三、脚本编写

脚本要实现的功能:

将当前机器的文件,同步到集群所有机器的相同路径下(可传递相对路径或绝对路径)

在hadoop01创建脚本:

[zp@hadoop01 ~]$ touch xsync
[zp@hadoop01 ~]$ vi xsync

在xsync中编辑以下脚本内容:

#!/bin/bash
#校验参数是否合法

#如果没有传递参数
if(($#==0))
then
  echo 请输入要同步的文件~
  exit;
fi

#拼接要同步的文件的绝对路径
#获取父路径,加入-P是防止软链接文件绝对路径读取错误
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`

echo dirpath是$dirpath
echo filename是$filename

echo 要同步的文件路径是: $dirpath/$filename

#循环执行rsync同步文件到集群的每台机器
for i in hadoop02 hadoop03
do
 echo ----------------$i------------------
 rsync -rvlt $dirpath/$filename zp@$i:$dirpath
done

【需要注意的是倒数第二行,"zp@$i:dirpath",因为我在另外两台机器hadoop02、hadoop03用的账户名是zp,读者可以改成自己的用户名】

 

四、执行脚本

【将目录下的jdk复制到多台机器】

[zp@hadoop01 ~]$ bash xsync jdk1.8.0_141

执行脚本时候可传递相对路径jdk1.8.0_141 或 绝对路径/root/jdk1.8.0_141,脚本会自动判断

发现已经复制成功~!

 

©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页