前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell批量复制脚本(rsync)【直接复制拿走】

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

作者头像
Java架构师必看
发布2021-05-14 17:40:29
1.5K0
发布2021-05-14 17:40:29
举报
文章被收录于专栏:Java架构师必看Java架构师必看

一、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架构师必看的立场,转载请标明来源出处

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、rsync同步命令
  • 二、复制需求确定
  • 三、脚本编写
  • 四、执行脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com