使用Rclone多端备份文件

上大学用电脑的时候越来越多,文件的备份和同步成为一个重要的问题,我曾经遇到过本地blog文件夹误删除,Recuva恢复数据(其实也只恢复了一小部分)的痛苦经历。Rclone就是一个非常不错的选择,它支持多种云存储服务,也支持将文件备份到本地。

安装

使用Scoop包管理器可以安装:

1
scoop install main/rclone

配置

Google Drive

输入:

1
rclone config

输入 n (New remote),起个名字,例如:Google Drive

Storage 列表里找到 Google Drive,输入对应的数字。

Client IDClient Secret建议留空直接回车(使用 Rclone 默认的),或者如果追求极速,可以去 Google Cloud Console 申请自己的 API。

Scope:选择 1 (Full access)。

Service Account File:留空回车(服务账号是一个特殊的“机器人”账号,通过一个 JSON 格式的密钥文件来授权,而我们普通用户一般通过浏览器OAuth授权)。

Advanced config:选 n

Use web browser to authenticate:选 y。此时会弹出浏览器,登录你的 Google 账号并授权,注意这里需要在shell中开启梯子,否则报错。

Configure this as a Shared Drive:如果你用的是普通个人盘,选 n

最后输入 y 确认保存即可。

编写同步脚本

创建一个文件 backup.nu,例如:

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
# backup.nu
def main [] {
let source = "D:/sync"
let target = "Google Drive:/sync"

# 将所有参数放在一个列表里,这样就不需要反引号连接行了
let rclone_args = [
"sync"
$source
$target
"--progress"
"--fast-list"
"--drive-chunk-size" "64M"
"--exclude" "$RECYCLE.BIN/**"
"--exclude" "System Volume Information/**"
"--ignore-errors"
"--exclude" "**/.git/**" # 排除 Git 仓库历史
"--exclude" "**/.cache/**" # 排除各种程序的缓存
"--exclude" "**/node_modules/**" # 如果你有前端项目,这个必带
]

print $"[(date now | format date '%Y-%m-%d %H:%M:%S')] 正在开始镜像同步..."

# 使用 ... 符号将列表展开并传给 rclone
rclone ...$rclone_args

print "同步完成!"
}

自动定时同步

  1. 按下 Win + R,输入 taskschd.msc
  2. 点击右侧“创建任务”。
  3. 常规:名称填 Rclonesync,勾选“不管用户是否登录都要运行”和“使用最高权限”。
  4. 新建触发器。
  5. 选择“按预定计划”,每天。
  6. 在“高级设置”里,勾选 “重复任务间隔”,选择 1 小时(或者更短,如 15 分钟),持续时间设为“无限期”。
  7. 操作:新建 -> 启动程序。
  8. 程序或脚本:输入 nu.exe (如果已经用 scoop 安装了 nushell)。
  9. 添加参数C:\你的脚本路径\backup.nu