#[2020-11-22 23:04]正式版本
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#cfg_path="/root/.config/rclone/rclone.conf" #命令结果赋值给变量
cfg_cmd=$(rclone config file) #rclone查询配置文件路径,命令结果含有非路径字符需要截取
cfg_path=${cfg_cmd#*:} #使用 # 号截取 : 右边字符,*号表示忽略:的左边
echo $cfg_path
#grep -c 'MASTER' /root/.config/rclone/rclone.conf #统计MASTER主盘个数,超过1个就报错不再执行
#if [ $(grep -c 'MASTER' $cfg_path) == 1 ]; then echo yes; else echo "MASTER不等于1,退出脚本";exit; fi #普通正则语法
if [ $(grep -Pc '(?<=\[).*MASTER.*(?=\])' $cfg_path) == 1 ]; then echo yes; else echo "统计到MASTER配置名不等于1个,退出脚本";exit; fi #P正则语法
echo "有且只有1个MASTER配置名,继续执行..."
#grep -Po '(?<=\[).*(?=\])' /root/.config/rclone/rclone.conf #通过[*]匹配提取配置文件中的每个配置名称
grep -Po '(?<=\[).*MASTER.*(?=\])' /root/.config/rclone/rclone.conf #查看[*]匹配提取配置中的每个MASTER名称
grep -Po '(?<=\[).*SLAVE.*(?=\])' /root/.config/rclone/rclone.conf #查看[*]匹配提取配置中的每个SLAVE名称
src=$(grep -Po '(?<=\[).*MASTER.*(?=\])' $cfg_path) #通过[*]匹配提取文件中的包含MASTER的字符行.赋值为源路径
dst=$(grep -Po '(?<=\[).*SLAVE.*(?=\])' $cfg_path)" "$src #通过[*]匹配文件中的包含SLAVE的字符行.并拼接进src用空格隔开src元素给for循环使用
echo $dst
for dst_line in $dst
do
echo 循环读取: $dst_line
session="sync-"$dst_line #tmux进程名
tmux new-session -s $session -d #新建tmux进程
if [[ $dst_line == *SLAVE* ]] #如果包含SLAVE字符则执行sync,否则跳过直接执行去重
then echo "包含SLAVE,判断为从目录,执行主目录sync到从目录";
tmux send-keys -t $session 'gclone sync '$src': '$dst_line': --drive-server-side-across-configs -v --stats 5s --drive-chunk-size 32M' C-m #源主目录sync到目的从目录
else echo "不包含SLAVE,判断为主目录,不执行sync命令";
fi
tmux send-keys -t $session 'gclone dedupe '$dst_line': --disable ListR' C-m #去重
done
#quit
#tmux send-keys -t $session 'exit' C-m
endDate=`date +"%Y-%m-%d %H:%M:%S"` ; echo "[$endDate] Successful"
echo "----------------------------------------------------------------------------"