原理:自动从rclone.conf配置中提取含有"MASTER"(主盘)和"SLAVE"(从盘)字符的配置名称列表,
配置名称格式参考
1 2 3 4 5 6 7 |
[root@www tmp]# rclone config Name Type ==== ==== MASTER-uteam #主盘 SLAVE-ccteam #从盘1 SLAVE-lateam #从盘2 [root@www tmp]# |
然后循环执行 gclone sync 或者 rclone sync 命令(根据你使用的rclone客户端)
1 |
gclone sync '$主盘': '$从盘': --drive-server-side-across-configs -v --stats 5s --drive-chunk-size 32M |
- 需要安装Tmux
- 只能存在一个主盘
- 可以存在多个从盘(一个主盘同步到多个从盘)
- 本脚本包含rclone的 sync同步 和 dedupe去重 两个指令.
使用步骤
- 创建含有"MASTER"和"SLAVE"字符串的谷歌盘配置名
- 新建shell脚本rclone-sync-slave.sh,复制下方完整代码
- 执行bash rclone-sync-slave.sh
- 完
- 以下是完整脚本,新建rclone-sync-slave.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#[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 "----------------------------------------------------------------------------" |