第一次使用需要安装rsync
yum -y install rsync
创建执行文件
vi /usr/local/bin/xsync
执行权限
chmod a+x /usr/local/bin/xsync
bash
#!/bin/bash
# 获取输出参数,如果没有参数则直接返回
pcount=$#
if [ $pcount -eq 0 ]
then
echo "no parameter find !";
exit;
fi
# 获取传输文件名
p1=$1
filename=`basename $p1`
echo "load file $p1 success !"
# 获取文件的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo "file path is $pdir"
# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$2
case "$user" in
"-root")
user="root";;
"")
user=`whoami`;;
*)
echo "illegal parameter $user"
esac
echo $user
# 拷贝文件到从机(这里注意主机的host需要根据你的实际情况配置,要与你具体的主机名对应)
for (( host=2;host<=5;host++ ))
do
echo "================current host is bigdata0$host================="
# -p 保持文件原有权限
# -g 保持文件原有用户组
# -o 保持文件原有属主
rsync -rvlpgo $pdir/$filename $user@bigdata0$host:$pdir
done
echo "complate !"
#!/bin/bash
# 显示帮助信息
show_help() {
echo "Usage: $0 [-i <host1> <host2> ... | -f <file> | -h] <command>"
echo " -i <host1> <host2> ... Specify a list of hosts to execute the command on."
echo " -f <file> Specify a file containing a list of hosts, one per line."
echo " -h Show this help message."
echo " <command> The command to execute on the remote hosts."
echo ""
echo "Examples:"
echo " $0 /path/file"
echo " $0 -i \"bigdata01 bigdata02\" /path/file"
echo " $0 -f hosts.txt /path/file"
}
# 默认主机列表
default_hosts=("bigdata01" "bigdata02" "bigdata03" "bigdata04" "bigdata05")
# 读取主机列表,如果没有指定 -i 或 -f,则使用默认值
hosts=("${default_hosts[@]}")
# 解析参数
while getopts "f:i:h" opt; do
case $opt in
f)
# 如果提供了 -f 参数,则读取文件中的主机列表
hosts_file="$OPTARG"
if [ ! -f "$hosts_file" ]; then
echo "Error: File not found - $hosts_file"
exit 1
fi
mapfile -t hosts < "$hosts_file"
;;
i)
# 如果提供了 -i 参数,则将后面的参数作为主机列表
hosts=()
IFS=' ' read -ra hosts <<< "$OPTARG"
;;
h)
show_help
exit 0
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
# 移除解析过的参数,留下命令
shift $((OPTIND -1))
if [ $# -eq 0 ]; then
echo "No command provided."
show_help
exit 1
fi
# 获取传输文件名
p1=$1
filename=`basename $p1`
echo "load file $p1 success !"
# 获取文件的绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo "file path is $pdir"
# 获取当前用户(如果想使用root用户权限拷贝文件,在命令后加入-root参数即可)
user=$(whoami)
echo "User: $user"
# 拷贝文件到从机(这里注意主机的host需要根据你的实际情况配置,要与你具体的主机名对应)
for host in "${hosts[@]}";
do
# 拷贝文件到从机,跳过当前主机
if [ "$host" == "$(hostname)" ] || [ "$host" == "$(hostname -I | awk '{print $1}')" ]; then
echo "Skipping current host: $(hostname)"
continue
fi
echo "================current host is $host================="
# SSH到目标主机并检查目录是否存在,如果不存在则创建
ssh $user@$host "mkdir -p '$pdir'"
# -p 保持文件原有权限
# -g 保持文件原有用户组
# -o 保持文件原有属主
rsync -rvlpgo $pdir/$filename $user@$host:$pdir
done
echo "complate !"