第一次使用需要安装rsync
yum -y install rsync
创建执行文件
vi /usr/local/bin/xsync
执行权限
chmod a+x /usr/local/bin/xsync
#!/bin/bash# 获取输出参数,如果没有参数则直接返回
pcount=$#
if [ $pcount -eq 0 ]
thenecho "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"esacecho $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
doneecho "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; docase $opt inf)# 如果提供了 -f 参数,则读取文件中的主机列表hosts_file="$OPTARG"if [ ! -f "$hosts_file" ]; thenecho "Error: File not found - $hosts_file"exit 1fimapfile -t hosts < "$hosts_file";;i)# 如果提供了 -i 参数,则将后面的参数作为主机列表hosts=()IFS=' ' read -ra hosts <<< "$OPTARG";;h)show_helpexit 0;;\?)echo "Invalid option: -$OPTARG" >&2exit 1;;:)echo "Option -$OPTARG requires an argument." >&2exit 1;;esac
done# 移除解析过的参数,留下命令
shift $((OPTIND -1))
if [ $# -eq 0 ]; thenecho "No command provided."show_helpexit 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}')" ]; thenecho "Skipping current host: $(hostname)"continuefiecho "================current host is $host================="# SSH到目标主机并检查目录是否存在,如果不存在则创建ssh $user@$host "mkdir -p '$pdir'"# -p 保持文件原有权限# -g 保持文件原有用户组# -o 保持文件原有属主rsync -rvlpgo $pdir/$filename $user@$host:$pdir
doneecho "complate !"