有时如果想要将一台节点上的内容发送到其它节点上,可以使用rsync命令。
!/bin/bash
##################################################################
##脚本功能:将文件分发到其它节点
##
##示例:xsync 文件名或文件目录
#################################################################
#STEP1: 获取参数。若没有参数,则返回错误信息,并退出。$#是获取所有参数的个数
if [ $# -lt 1 ];then
echo '至少要传入1个参数!'
exit;
fi
#STEP2: 遍历集群
for host in hadoop103 hadoop104
do
echo ======================= $host ====================
#STEP3: 遍历所有文件。$@是获取所有参数
for file in $@
do
#STEP4: 文件是否存在
if [ -e $file ];then
#STEP5: 获取父目录
#dirname是去除文件名中的非目录部分,传入的参数可以是一个绝对路径;
pdir=$(cd -P $(dirname $file); pwd)
#STEP6: 获取当前文件的名称
fname=$(basename $file)
#STEP7: SSH到目标节点,创建目录
ssh $host "mkdir -p $pdir"
#STEP8: 分发文件
#a表示递归传输,v表示详细模式输出
rsync -av $pdir/$fname $host:$pdir
else
echo '$file is not exists!'
fi
done
done
注意:
- 使用该脚本前最好配置SSH无秘登录,否则需要手动输入密码;
- 该脚本应该放置/bin目录下,并赋执行权限:chmod +x xsync,这样即使是root文件,也可以通过sudo 命令调用传输。