MENU

Linux将本地文件上传到Google Drive

• October 23, 2020 • Read: 1499 • 主机,媒体

前言

上周罗马尼亚商家hostsolution的1T大硬盘服务器又开售了,遂入手一台拿来做离线下载服务器和刷pt,3年50欧元,价格还可以,重点是这家抗DMCA,据说是连迪士尼也都不鸟的,bt下载很合适。而6月份的时候买了这家的另一款大硬盘服务器做离线下载,但是价格很高,于是想把已有的这台租出去回点血。但是这台服务器上已经下载了一些东西,大概有200多G,存到本地是不可能的,太占硬盘,只能存到云上,云存储方案有Google Driver和Onedrive,Onedrive只有5T,而且账号不稳定,还是选择Google Drive吧。

过程

方案定好以后,就是找工具了,毕竟Google Driver官方没有服务器版客户端,不像在Windows上那么方便,好在还真有这样的工具。一开始找到了这篇帖子,但是在获取verification code的时候提示Sign in with Google temporarily disabled for this app.This app has not been verified yet by Google in order to use Google Sign In.而并不是文章中说的会返回一串地址,在萌鼠博客下看到据他推测是API过期了,一看文章的日期是2017年,看来很可能是这个原因。

不过GitHub有人解决了这个问题,工具的仓库在下面


相应的提问和解决在issues 546issues 533,这里梳理一下过程。

1.安装Go环境

因为工具是用Go语言编写的,解决前述问题需要自己编译,所以要先安装Go环境。
1. 下载Go的二进制安装包

wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz

2. 检查下载文件是否正确

sha256sum go1.13.5.linux-amd64.tar.gz

正确的输出应该如下

cde4af177ef9f218f51f5e12041f43004f9fa1b0e45d3b647c252aba04901035 go1.13.5.linux-amd64.tar.gz

3. 解压安装包到/usr/local

tar -C /usr/local -xf go1.13.5.linux-amd64.tar.gz

4. 设置环境变量
打开/.bash_profile文件

vi ~/.bashrc

在文件最后面加入下列内容:

export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin

保存文件,然后使环境变量生效

source ~/.bashrc

5. 验证Go是否成功安装:

go version

正常情况下应该输出如下内容:

go version go1.13.5 linux/amd64

2.创建自己的谷歌凭据

这篇文章有详细的设置步骤说明,大体流程如下:

  1. 前往谷歌API控制台(Google API Console)
  2. 创建一个新的项目(Create a new project)
  3. 给项目添加Google Drive API(Enable Google Drive API)
  4. 配置许可(Configure Consent Screen)
  5. 创建桌面应用的OAuth client ID凭据(Create credentials by choosing OAuth client ID about desktop app)

3.下载gdrive并设置凭据

1. 下载gdrive包并进入目录

git clone https://github.com/gdrive-org/gdrive.git
cd gdrive/

2. 填入自己的凭据

vi handlers_drive.go

修改17、18行为在2.5中获得的自己的凭据

const ClientId = "367116221053-7n0v**.apps.googleusercontent.com"
const ClientSecret = "1qsNodXN*****jUjmvhoO"

修改完后保存并退出

4.编译创建自己的gdrive

1. 获取依赖

go get github.com/prasmussen/gdrive

2. build该项目

go build
chmod +x gdrive
mv gdrive /usr/local/bin/

5.激活authentication

gdrive about

输入上述命令后会得到一个如下的链接:

https://accounts.google.com/o/oauth2/auth?client_id=123456789123-7n0vf**

在浏览器中打开上述链接,并允许应用获取相关权限,然后你会得到一个如下的verification code:

4/9gKYAFAJ326XIP6J42t35**

将上述verification code复制并粘贴到终端,整个过程就结束了。接下来就可以尽情使用gdrive了,具体的使用命令参考文章开头GitHub仓库的readme。

Example

1.上传本地文件到Googledrive

nohup gdrive upload --parent $directoryID(gd的文件夹ID。eg:0B3X9GlR6EmbnY1RLVTk5VUtOVkk) $PATH(本地文件的文件名。eg:readme.md) >log.out &
  • 本地文件readme.md将被上传至0B3X9GlR6EmbnY1RLVTk5VUtOVkk下

2.上传本地文件夹到Googledrive

nohup gdrive upload -r --parent $directoryID(gd的文件夹ID。eg:0B3X9GlR6EmbnY1RLVTk5VUtOVkk) '$PATH'(本地文件夹的名称。eg:'docs') >log.out &
  • 本地文件夹(doc它自己)将被上传至0B3X9GlR6EmbnY1RLVTk5VUtOVkk下

3.同步本地文件夹到Googledrive

nohup gdrive sync upload $PATH(本地文件夹的名称。eg:Docs) $directoryID(gd的文件夹ID。eg:0B3X9GlR6EmbnY1RLVTk5VUtOVkk) >log.out &

几点说明:

  • 注意这里同步的是$PATH$directoryID下的所有文件,也就是将上传同步$PATH下的所有文件到$directoryID下,但$PATH自己并不会上传上去,注意和上面第二条的区别
  • 貌似只要使用过一次同步命令,gdrive就会认定$directoryID为同步目录,以后就不能使用upload了,而必须使用sync upload,但sync upload会比较本地和gd的文件异同,速度很慢。因此一般情况下不要使用snyc upload

参考文章

  1. https://github.com/prasmussen/gdrive/issues/546
  2. https://www.mynotepaper.com/mount-google-drive-using-gdrive-on-linux-server-with-own-oauth-credentials
Last Modified: February 22, 2021