参考:

https://www.uud.me/qiwenzalun/autorclone-gclone.html

http://blog.jialezi.net/?post=153

https://gsuitems.com/index.php/archives/13/

本文大部分复制以上链接拼接并修改。

GoogleDrive 每日流量限制为750G,AutoRclone 的功能在于通过谷歌开发者平台创建多个服务账户,实现达到750G流量限制后,自动切换账户。AutoRclone 同时配合 Gclone 能够在 Google Drive 账号之间、谷歌团队盘之间快速拷贝、传输学习资料。

本文的设置过程中,主要使用 AutoRclone 生成 Service Accounts,然后配合 gclone 中 service_account_fileservice_account_file_path 这两项参数,调用 Service Accounts,实现达到750G流量限制后,自动切换账户。本文记录一下设置的详细过程

感谢以下项目:

https://github.com/xyou365/AutoRclone

https://github.com/Spazzlo/folderclone

https://github.com/donwa/gclone

将实现的功能

  • 从本地服务器传输到 Google Team Drive
  • 从他人分享的链接拷贝到 Google Team Drive
  • 从一个 Google Team Drive 传输到另一个 Google Team Drive
  • 以上都不受750G流量限制

准备工作

  • 一台 VPS服务器,当然在 本地电脑 Windows 上也是可以的,不过本文以 VPS 为例
  • 一个谷歌账号
  • 一个 Google Team Drive 账号,如果没有,本文结尾会提供几个免费获取渠道

大致过程

  1. 安装 Python3 和 AutoRclone
  2. 借助谷歌开发者平台,生成服务账号
  3. 将服务账号 service accounts 加入到 Google Groups
  4. 安装 gclone 进行复制文件

获取免费Team Drive

这里分享几个分享获取 Team Drive 的网站

但是注意:

千万不要在这些 Team Drive 中存放任何重要资料、隐私资料

没人这些 Team Drive 会不会翻车失效

地址:

https://gd.404edu.workers.dev/
http://leon.educationhost.cloud/

安装详细过程

以下教程内容基于 Debian10 系统的 VPS 服务器

安装Python3

首先删除vps自带的python3.5,可以通过python --version 查看。必须安装python3.6版本以上

sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev curl

sudo apt autoremove python3.5 python3.5-dev
sudo curl -O https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
tar -xf Python-3.8.2.tar.xz

cd Python-3.8.2
./configure --enable-optimizations

make -j 8
#For faster build time, modify the -j flag according to your processor. If you do not know the number of cores your processor you can find it by typing nproc. My system has 8 cores, so I am using the -j8 flag.

sudo make install
#关联python3.8到python命令。如果提示没有不用理会,如果提示有文件路径,用rm -rf删除,比如rm -rf /usr/bin/python
ln -s /usr/local/bin/python3.8 /usr/bin/python3
ln -s /usr/local/bin/python3.8 /usr/bin/python
ln -s /usr/local/bin/pip3.8 /usr/bin/pip
ln -s /usr/local/bin/pip3.8 /usr/bin/pip3

安装AutoRclone

git clone https://github.com/xyou365/AutoRclone && cd AutoRclone && pip3 install -r requirements.txt

生成Service Accounts

打开链接:https://developers.google.com/drive/api/v3/quickstart/python

1584068507.jpg

1584068507.jpg

点击 Enable the Drive API

在弹出的窗口中,下载生成的 credentials.json

1584068583.jpg

1584068583.jpg

查看以前和现在存在的凭据,然后将你下载的 credentials.json 放到 AutoRclone 目录下

上传完毕后,输入 ls 可以看到:

1584069078.jpg

然后需要分三种情况:

1、之前没有创建过项目

直接运行:

python3 gen_sa_accounts.py --quick-setup 1

以上命令含义:

  • 创建1个项目
  • 开启相关的服务
  • 创建100个 service accounts
  • 将100个 service accounts 的授权文件下载到 accounts 文件夹下面

2、已有项目,需要创建新的

python3 gen_sa_accounts.py --quick-setup 2 --new-only

以上命令含义:

  • 额外创建2个项目(项目N+1到项目N+2)
  • 开启相关的服务
  • 创建200个 service accounts(2个项目,每个项目100个)
  • 将200个 service accounts 的授权文件下载到 accounts 文件夹下面

3、使用已有项目,不创建新的(如果需要显示URL,需要删除整个文件夹)

注意:如果网页版google drive 存在问题,不需要执行此步骤重新添加账号,只需要重新添加google group即可

python3 gen_sa_accounts.py --quick-setup -1

以上命令会继续添加 service accounts,在已关联google account账户情况下,下图红框不会显示,只会生成新的 service accounts

image-20200624134154609

举例:第一种情况时,运行 python3 gen_sa_accounts.py --quick-setup 1

如下图,浏览器打开返回的链接:

1584069533.jpg

登录拥有 Team Drive 账号的谷歌账户:

1584069580.jpg

选择 允许

1584069629.jpg

[1584069629.jpg](https://img.uud.me/dispatch/683999333edcc2dc77ebee58a590f8bb)

复制返回的代码,粘贴到 Xshell 会话窗口:

1584070486.jpg

[1584070486.jpg](https://img.uud.me/dispatch/c87eef8b24be14a40bd46d9e1b4c9c92)

粘贴后回车:

1584070586.jpg

1584070586.jpg

如果回车后,你看到如上图的提示,原因是谷歌账号未开启 Service Usage API

复制打开提供的链接地址,到浏览器打开,注意是登录你刚刚授权的谷歌账户,然后点击启用:

1584070521.jpg

1584070521.jpg

启用成功后,回到 Xshell 会话窗口,点击回车,之后就会显示类似下图内容:

1584070733.jpg

1584070733.jpg

此时就需要耐心等待

之后进入 accounts 文件夹下,会看到非常多的 .json 后缀文件:

1584070979.jpg

1584070979.jpg

将service accounts加入Google Groups

此为可选操作,但建议操作

算是整个过程里最麻烦的步骤了

这个步骤也分两种情况

  • 你的账户是普通 Google 账户
  • 你的账户是 G Suite 管理员

如果是管理员,这一个步骤还是比较快速的

但是如果你只是免费领取的 Google Team Drive 账户,那就比较麻烦

我们这一步需要将刚刚生成的数以百计的 Service Accounts 添加到 Google Group 中

而且,每次只能加10个,每24小时只能加100个

所以……

以下为普通账户的操作

创建Google Group

打开链接:https://groups.google.com/

创建群组:

1584071501.jpg

1584071501.jpg

填写群组信息:

1584071544.jpg

1584071544.jpg

批量提取 Service Accounts

生成 Service Accounts 后,直接运行以下命令:

cd
cat /home/geerda/AutoRclone/accounts/*.json | grep "client_email" | awk '{print $2}'| tr -d ',"' | sed 'N;N;N;N;N;N;N;N;N;/^$/d;G' > /home/geerda/AutoRclone/email.txt

批量提取代码来源于:http://fxxkr.com/2020/04/06/onekey-print-email-from-google-sa-json/

运行后,会自动提取 Service Accounts 邮箱账户,并保存到目录下的 email.txt 文件中,同时还很贴心地每10个邮箱账户就隔开一行,方便复制。

或者用我写的Python脚本读取credentials.json并处理出邮箱列表:

from pathlib import Path
import json
#analysis_root_dir改成你的credentials.json位置,store_result改成储存位置。输出结果为10个一组邮箱

analysis_root_dir = r"c:\Users\Administrator\Desktop\accounts"
store_result=r"c:\Users\Administrator\Desktop\accounts\dependency.txt"

def parse_dir(root_dir):
    path = Path(root_dir)

    all_json_file = list(path.glob('**/*.json'))

    parse_result = []

    for json_file in all_json_file:

        # 获取所在目录的名称
        service_name = json_file.parent.stem
        with json_file.open() as f:
            json_result = json.load(f)
        json_result["service_name"] = service_name
        parse_result.append(json_result)

    return  parse_result

def write_result_in_file(write_path , write_content):
    counter=0

    with open(write_path,'w') as f:
        for dict_content in write_content:
             url = dict_content['client_email']
             f.writelines(url+",")
             counter+=1
             if counter%10==0:
                    f.writelines("\n\n")
            

def main():
    print("main begin...")
    parse_result = parse_dir(analysis_root_dir)
    write_result_in_file(store_result,parse_result)
    print("main finished...")

if __name__ == '__main__':
    main()

添加到Group

Group 已经创建,Service Accounts 邮箱也已经获取,现在我们将这些邮箱添加到 Group 中

注意每次只能添加10个,每24小时只能添加100个

回到 Group 页面,右上角 管理成员

1584071713.jpg

1584071713.jpg

左侧 直接添加成员,将 Service Accounts 邮箱复制粘贴10个,点击 添加

1584072420.jpg

1584072420.jpg

重复以上步骤,将100个邮箱添加进去:

1584077562.jpg

[1584077562.jpg](https://img.uud.me/dispatch/5cb4d367590fbb0b6ec9749b138f7094)

累了累了……

Group邮箱添加到Team Drive

如下图:

1584077685.jpg

[1584077685.jpg](https://img.uud.me/dispatch/5a41931bf25e46434b09932f52f5db8c)

找到群组邮箱:

1584077716.jpg

1584077716.jpg

将这个邮箱添加到你的 Google Team Drive 中:

1584077784.jpg

1584077784.jpg

1584077818.jpg1584077818.jpg

添加完成后,基本就完成所有设置了

直接添加账号,不使用Group方式

首先将 service accounts 加入到目标Team Drive

cd /root/AutoRclone
#将以下SharedTeamDriveDstID替换为你团队盘ID,如果添加进group,不需要这一步 
python3 add_to_team_drive.py -d SharedTeamDriveDstID

查看团队盘ID:

打开你的团队盘,查看浏览器上的链接,比如:

https://drive.google.com/drive/u/2/folders/0App-QeDCIy_mUk9PVA

以上链接中,0App-QeDCIy_mUk9PVA 就是ID

那么就应该运行命令:

python3 add_to_team_drive.py -d 0App-QeDCIy_mUk9PVA

回车后,再次回车:

1584082783.jpg

如何使用

详细的使用命令可以看这里:https://github.com/xyou365/AutoRclone#step-5-start-your-task

https://drive.google.com/drive/u/2/folders/10zOvIf8yBmIuZgBfC3rcDKWHIlODZjXF
python3 rclone_sa_magic.py -s 10zOvIf8yBmIuZgBfC3rcDKWHIlODZjXF -d 0AMp-QeDCIy_mUk9PVA -dp InSide.No.09 -b 1 -e 600 --drive-server-side-across-configs

以上命令是将共享链接里的文件保存到自己的 Team Drive

配合Gclone使用(推荐)

gclone 其实就是 rclone 的加强版,为Google Drive 操作增加自动切换账户和命令行根目录id操作支持

其他功能与原版 rclone 相同

安装gclone

bash <(wget -qO- https://git.io/gclone.sh)

然后就安装完成了

你可以选择将 gclone 重命名为 rclone,方便使用:cp /usr/bin/gclone /usr/bin/rclone

以下内容都是以没有重命名为例,如果你进行了重命名,将以下命令中出现的gclone 改为 rclone

配置gclone

首先需要先记下 /root/AutoRclone/accounts/中的其中一个文件:

ls /root/AutoRclone/accounts

回车后会显示很多 .json 后缀的文件名,复制其中一个文件名,记下文件路径,比如:

/root/AutoRclone/accounts/7c3c53023d06ae8688084c82f507480c878a422c.json

然后进行 gclone 的配置

gclone 在使用上跟 rclone 是一致的,配置过程也几乎一样

运行以下命令进行配置:

gclone config
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n   # 输入n回车,新建配置
name> GD   # 新建配置的名称,自行设定
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / 1Fichier
   \ "fichier"
 2 / Alias for an existing remote
   \ "alias"
 3 / Amazon Drive
   \ "amazon cloud drive"
 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
   \ "s3"
 5 / Backblaze B2
   \ "b2"
 6 / Box
   \ "box"
 7 / Cache a remote
   \ "cache"
 8 / Dropbox
   \ "dropbox"
 9 / Encrypt/Decrypt a remote
   \ "crypt"
10 / FTP Connection
   \ "ftp"
11 / Google Cloud Storage (this is not Google Drive)
   \ "google cloud storage"
12 / Google Drive
   \ "drive"
13 / Google Photos
   \ "google photos"
14 / Hubic
   \ "hubic"
15 / JottaCloud
   \ "jottacloud"
16 / Koofr
   \ "koofr"
17 / Local Disk
   \ "local"
18 / Mega
   \ "mega"
19 / Microsoft Azure Blob Storage
   \ "azureblob"
20 / Microsoft OneDrive
   \ "onedrive"
21 / OpenDrive
   \ "opendrive"
22 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   \ "swift"
23 / Pcloud
   \ "pcloud"
24 / Put.io
   \ "putio"
25 / QingCloud Object Storage
   \ "qingstor"
26 / SSH/SFTP Connection
   \ "sftp"
27 / Union merges the contents of several remotes
   \ "union"
28 / Webdav
   \ "webdav"
29 / Yandex Disk
   \ "yandex"
30 / http Connection
   \ "http"
31 / premiumize.me
   \ "premiumizeme"
Storage> 12       # 选择需要挂载的网盘类型
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default ("").
client_id>        # 默认直接回车,或者输入credentials.json中client_id 
Google Application Client Secret
Setting your own is recommended.
Enter a string value. Press Enter for the default ("").
client_secret>    # 默认直接回车,或者输入credentials.json中client_secret
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
   \ "drive"
 2 / Read-only access to file metadata and file contents.
   \ "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
   \ "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
   \ "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
   \ "drive.metadata.readonly"
scope> 1 # 选择1然后回车
ID of the root folder
Leave blank normally.

Fill in to access "Computers" folders (see docs), or for rclone to use
a non root folder as its starting point.

Note that if this is blank, the first time rclone runs it will fill it
in with the ID of the root folder.

Enter a string value. Press Enter for the default ("").
root_folder_id>        # 直接回车
Service Account Credentials JSON file path 
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default ("").
service_account_file> # 直接回车,如果使用Service Account就填写其中一个文件的绝对路径即可:/root/AutoRclone/accounts/0a5af037763bdab70e3a7094d02ec4bd37f8db94.json
Service Account Credentials JSON file path .

Enter a string value. Press Enter for the default ("").
service_account_file_path> 直接回车,如果使用Service Account就填写这个路径:/root/AutoRclone/accounts/
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n                    # 选择n 不使用高级配置
Remote config
Configure this as a team drive?
y) Yes
n) No (default)
y/n> y                     # 选择n不加载团队盘,选择y加载团队盘
Fetching team drive list...
Choose a number from below, or type in your own value
 1 / 网盘01
   \ "0AFZFXMn1uKs2Uk9PVA"
 2 / 网盘05
   \ "0AI3nH3Vf8NWIUk9PVA"
 3 / 网盘02
   \ "0ADYACmKjlU3JUk9PVA"
Enter a Team Drive ID> # 选择你的团队盘编号
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y       # 选择y回车
Current remotes:

Name                 Type
====                 ====
网盘01             drive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q   # 输入q回车,保存配置退出

配置过程中,需要注意的是,当出现 service_account_file 选项时,填入以上记下的 .json 文件

当出现 service_account_file_path 时,填入 /root/AutoRclone/accounts/

1584103752.jpg

1584103752.jpg

之后就配置完成了

使用gclone复制文件

作者 Github 提供的文档:https://github.com/donwa/gclone/blob/master/README_zh.md

简单记录常用命令

复制共享链接文件到团队盘
gclone copy edugd:{目录id} edugd:{目录id} --drive-server-side-across-configs -v

以上命令中,edugd 是你配置 gclone 时设置的 name(可以通过rclone config 查看)

目录id` 是共享链接中链接中的最后部分,比如:`https://drive.google.com/drive/u/2/folders/10zOvIf8yBmIuZgBfC3rcDKWHIlODZjXF

10zOvIf8yBmIuZgBfC3rcDKWHIlODZjXF 就是目录id

--drive-server-side-across-configs 用于谷歌盘之间传输时使用,不走服务器流量,传输速度也更快

-v 用于查看传输过程的速度

命令使用示例:

gclone copy edugd:{10zOvIf8yBmIuZgBfC3rcDKWHIlODZjXF} edugd:{1j4z3UH1thdNB8dOhTUgb0uRHxQaDYL1T} --drive-server-side-across-configs -v

目标位置除了使用 id 外,也可以直接使用目录,比如:

gclone copy edugd:{10zOvIf8yBmIuZgBfC3rcDKWHIlODZjXF} edugd:Movie-TV/剧集/日韩/王国-李尸王朝 --drive-server-side-across-configs -v
传输本地文件到团队盘
gclone copy /root/Downloads/王国-李尸王朝 edugd:Movie-TV/剧集/日韩/王国-李尸王朝 -v

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

besttrace VPS回程测速方法 上一篇
建立google driver在线目录goindex 下一篇