为什么使用 rclone
我们使用网盘,一般是打开客户端,然后上传我们的文件或者文件夹,但是当我们的数据在本地更新了,网盘上却不会更新(据我所知 Dropbox 和 iCloud 可以做到同步更新),需要我们再次打开客户端上传一遍。能不能让本地文件实时(或者每间隔一段时间)同步上传到网盘呢?rclone 可以做到这一点。不仅如此,rclone 还可以让你使用命令行在不同网盘之间同步数据。
rclone 是一个命令行程序,支持 Windows、Linux、macOS 平台,用来与网盘进行数据同步,目前已支持的网盘种类非常多,包括 Google Drive、Dropbox、Microsoft One Drive 等等。
关于 rclone 的安装请查看 安装教程。
与 Google Drive 同步
首先是设置 Google API:
访问 Google API 控制台,并且使用 Google 账号登录;
选择一个项目 (project) 或新建一个项目;
在上方的 API 搜索框中键入 Google Drive 然后回车,找到搜索结果中的 Google Drive API:
进入后,点击启用;
如果此前没有配置过“同意屏幕”,那么点击左侧菜单中的“配置同意屏幕”,选择目标用户类型为外部,应用名称可以填入“rclone”,然后填入自己的邮箱,gmail 即可,点击保存创建,最后在创建好的同意屏幕中,把“发布状态”从“测试”切换为“发布”;
点击左侧菜单的“凭据”,点击屏幕上方的“+创建凭据”,选择“OAuth 客户端 ID”,应用类型选择“桌面应用”,点击创建,然后就会显示 OAuth 客户端的 clinet_id 以及 client_secret,这两样东西后面会用到。
然后是添加网盘配置:
使用rclone config
命令配置网盘,键入 n 来创建第一个网盘,取名叫 GD:
1 | rclone config |
然后选择网盘类型 (Storage),键入 drive,
1 | Type of storage to configure. |
键入之前获取的 clinet_id 以及 client_secret:
1 | Google Application Client Id - leave blank normally. |
scope 键入 1,root_folder_id 回车默认,service_account_file 回车默认,Edit advanced config 键入 n,Use auto config 键入 y。
然后在自动打开的网页中登录 Google 账号,给予 rclone 修改 Google Drive 的权限。至此,创建网盘配置就完成了!
现在,我们就可以使用命令行来同步我们的数据了,比如我们可以将本地目录 ~/Documents/MyData/ 中的内容推送到 GD 网盘的 MyData/ 中:
1 | rclone sync ~/Documents/MyData/ GD:MyData/ |
自动化上传文件
我们可以编写脚本,每间隔一段时间就上传文件,这样就实现了网盘与本地的实时同步。
比如我的自动上传脚本:
1 | !/bin/bash |
这个脚本每间隔 1 个小时将本地文件同步到网盘中,文件夹的命名为“名字+日期”的形式,这样的话,网盘中每天会新增一个文件夹,用于保留历史备份。