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

2021-05-14 17:40:29 浏览数 (1)

一、rsync同步命令

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

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

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

本文使用的是rsync

安装rsync命令

代码语言:javascript复制
sudo yum install -y rsync

二、复制需求确定

目前作者实例的机器有

代码语言:javascript复制
192.168.0.191 hadoop01
192.168.0.192 hadoop02
192.168.0.193 hadoop03

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

三、脚本编写

脚本要实现的功能:

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

在hadoop01创建脚本:

代码语言:javascript复制
[zp@hadoop01 ~]$ touch xsync
[zp@hadoop01 ~]$ vi xsync

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

代码语言:javascript复制
#!/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复制到多台机器】

代码语言:javascript复制
[zp@hadoop01 ~]$ bash xsync jdk1.8.0_141

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

发现已经复制成功~!

本文来源itcats_cn,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处

0 人点赞