文件分发脚本xsync
#!/bin/bash
# 1. 判断参数,小于1个报错
# $#:判断输入参数的个数
# -lt:less then,小于
if [[ $# -lt 1 ]]; then
echo Not Enough Argument!
fi
# 2. 遍历集群
for host in hadoop102 hadoop103 hadoop104; do
# 打印正在遍历哪个节点
echo ======== $host ========
# 3. 遍历所有目录
# $@:相当于将输入参数看作一个整体
for file in $@; do
# 4. 判断文件是否存在
# -e equal
if [[ -e $file ]]; then
# 5. 获取父目录
# $(dirname $file):获取当前文件所在的目录,即.
# cd -P:如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
# pwd:获取绝对路径
pdir=$(cd -P $(dirname $file); pwd)
# 6. 获取文件名
fname=$(basename $file)
# 连接到其他节点,若没有对应的目录,创建
ssh $host "mkdir -p $pdir"
# rsync:快速同步多台主机间的文件
# -avl:归档模式+详细打印+保留软连接
# 需要提前下载rsync
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done