

从rclone配置中自动提取主/从路径进行一对多备份(主/从标识模式)
source link: https://www.luoji.men/?p=2114
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

从rclone配置中自动提取主/从路径进行一对多备份(主/从标识模式)
原理:自动从rclone.conf配置中提取含有”MASTER”(主盘)和”SLAVE”(从盘)字符的配置名称列表,
配置名称格式参考
[root@www tmp]# rclone config
Name Type
==== ====
MASTER-uteam #主盘
SLAVE-ccteam #从盘1
SLAVE-lateam #从盘2
[root@www tmp]#
然后循环执行 gclone sync 或者 rclone sync 命令(根据你使用的rclone客户端)
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
#[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 "----------------------------------------------------------------------------"
Recommend
-
34
在之前我们尝试过 hook webView 的 delegate,可以查看【
-
38
MySQL(11) 纪录一次left join一对多关系而引起的bug 我们有一个 订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定。但是由于物流表在保存订单信息的时候没有做判断该订
-
52
在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能。关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Mybatis并完成CRUD操作,这是本文操作的基础。本文先准备一个测试的数据库,然后使用M...
-
19
1. 前言 MySQL一对多的数据分页是非常常见的需求,比如我们要查询商品和商品的图片信息。但是很多人会在这里遇到分...
-
12
上篇随笔《ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)》介绍了一对多关系下的主从表数据处理,包括ABP框架对EF实体、DTO等关系处理,以及应用层基类接口的调整和Apicaller调...
-
12
在我们开发业务的时候,一般数据库表都有相关的关系,除了单独表外,一般还包括一对多、多对多等常见的关系,在实际开发过程中,需要结合系统框架做对应的处理,本篇随笔介绍基于ABP框架对EF实体、DTO关系的处理,以及提供对应的接口进行相关的数据保存更新操作...
-
5
法律界首场“一对多”人机竞赛开打 AI律师合同审核技能超越人类 2020年12月05日 15:34 891 次阅读 稿源:
-
11
IPv6地址自动配置中的有状态(stateful)和无状态(stateless)的区别 一个典型的IPv6主机单播地址由3部分组成:全局路由前缀、子网ID和接口ID(64位)。全局 路由前缀用来识别分配给一个站点的一个地址范围。子网ID也称为子网前缀,一...
-
6
sequelize 中如何对一对多,多对多模型进行增删改的操作? V2EX = way to explore V2EX 是一个关于分享和探索的地方 广告...
-
4
Java中从文件路径字符串中提取文件扩展名3种方法 在
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK