目录
1.前置准备
CentOS7、jdk1.8
安装rsync:yum install rsync -y (远程分发)
2.简单了解
-
basename:会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来 -

-

-

-
dirname(父级目录):从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录的部分) -
Shell数组用括号来表示,元素用空格符号分割,Shell中使用@ 或 * 可以获取数组中的所有元素
-
rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能
-v, --verbose 详细模式输出
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
3.脚本源码
等同于:rsync -av /home/hello.txt root@node02:/home
#!/bin/bash
# 传送一个文件或者一个文件夹
USAGE="使用方法:sh distribution.sh /home/xiaokangxxs.txt or sh distribution.sh /opt/software/hadoop-2.7.7"
# 如果输入参数不等于1,将使用方法打印
if [ $# -ne 1 ];then
echo $USAGE
exit 1
fi
#获取需要分发的文件名或者目录名
FDNAME=$(basename $1)
#获取需要分发的文件或目录的上级目录
PDIR=$(cd -P $(dirname $1);pwd)
#获取当前使用系统的用户名
USER=$(whoami)
#需要分发到的节点
NODES=("h2node02" "h2node03")
#循环分发
for NODE in ${NODES[*]};do
echo "--------分发至$NODE--------"
#如果目标节点的父级目录不存在,则创建出来
ssh $NODE "
if [ -d $PDIR ];then
. /etc/profile
else
mkdir $PDIR
fi"
rsync -av $PDIR/$FDNAME $USER@$NODE:$PDIR
done
4.测试使用
修改脚本权限:chmod 777 distribution.sh
- 方式一
./distribution.sh zk.sh
- 方式二
sh distribution.sh zk.sh
- 方式三
# 1.将shell脚本所在目录配置为环境变量(/etc/profile),记得source生效
export SHELL_HOME=/root/bin
export PATH=${JAVA_HOME}/bin:${SHELL_HOME}/:$PATH
source /etc/profile 生效变量
# 2.在任意目录都可以使用自己编写的shell脚本
distribution.sh ~/bigdata_bin/zk.sh

本文介绍了如何在CentOS7环境下,利用bash脚本结合rsync工具进行文件和目录的远程同步。内容包括basename和dirname命令的使用,Shell数组操作,以及rsync的-v和-a选项。提供了详细的脚本源码示例,演示了如何实现对多个节点的文件分发,并给出了测试使用的方法。
844

被折叠的 条评论
为什么被折叠?



