Linux下Google Drive同步软件

Linux, 分享 2018/04/06

之前撸了Google Drive(以下简称GD)的教育版无限容量空间,主要用作大文件的中转和存储。比如某台VPS需要重做系统,临时需要把VPS上重要的一些文件进行备份,待系统重装完后再从GD恢复到VPS上来。

Windows下,GD官方客户端倒是很好用,可是手里的VPS大部分是Linux系统,有没有好用的Linux客户端呢?

Linux下GD的第三方客户端有很多,对比使用之后还是觉得GDrive好用。Github:https://github.com/prasmussen/gdrive

简单的介绍一下Linux下GDrive的一些常用方法吧,以下操作基于CentOS 7 64bits

安装

GDrive的git上已经提供了多种系统下的已编译好的客户端,https://github.com/prasmussen/gdrive#downloads

p.s 不过由于它托管在GD上,正常网络情况下无法下载。所以我就挪到我的Nextcloud上(gdrive-linux-x64)

wget -O /usr/bin/gdrive https://file.bugxia.com/s/HjoJ5YnnxACQHLy/download
chmod 755 /usr/bin/gdrive

授权

使用GDrive进行同步前需要对GDrive进行授权

gdrive about

执行该命令后,将显示的网址复制下来,粘贴到浏览器中进行访问

登录自己的Google账号,进行授权,最后一步会获取到一个Token,复制并粘贴到ssh进行验证

验证通过就可以看到自己的账户信息

使用方法

GDrive提供了一套文件操作命令,详见Git,本文列举一些简单的操作

上传文件

上传至GD根目录

gdrive upload 本地文件路径
#如:gdrive upload gcc-4.9.4.tar.gz

上传至指定GD目录

首先需要获取GD上文件夹对应的目录ID,此目录名称和路径不一样,需要通过 gdrive list 命令查看,或网页端获取,比如要获取文件夹名称为BugXiaTest目录ID

#如果GD上文件不多,可以省略grep
gdrive list | grep BugXiaTest

如果文件数量很庞大,可以使用 –query 参数使用GD API相关命令进行查询,详见:https://developers.google.com/drive/v3/web/search-parameters

gdrive list --query "name contains 'BugXiaTest'"

或者网页端查看

上传文件至BugXiaTest目录

#如:gdrive upload axel-2.16.1.tar.gz --parent 1-nmMVwwrWXnndXVd_FLfwY3_kRelE-nV
gdrive upload 本地文件名称\路径 -p GD目录ID

上传完成后会显示该文件在GD上对应的文件ID和平均上传速度

下载文件

如果只需要下载到当前目录,可以省略 –path 参数

#如:gdrive download 1cyKbrbaIbjDVQYTOcEY3HVW5-bFAurll --path /root/axel
gdrive download GD上对应的文件ID --path 本地文件夹路径
#或
gdrive download GD上对应的文件ID

删除文件或文件夹

#删除文件
gdrive delete 文件ID
#删除目录
gdrive delete -r 目录ID

同步本地文件夹到GD

#如:gdrive sync upload --keep-remote /root/backup 1-nmMVwwrWXnndXVd_FLfwY3_kRelE-nV
gdrive sync upload 参数 本地文件夹路径 GD目录ID

参数:

–keep-remote 如果同步的文件和GD上的相同,则保留GD上的
–keep-local 如果同步的文件和GD上的相同,则覆盖GD上的
–keep-largest 如果同步的文件和GD上的相同,则上传文件体积大的
–delete-extraneous 如果GD上存在本机没有的文件,则删除GD上这些无关的文件

同步GD文件夹到本地

#如:gdrive sync download --keep-remote 1-nmMVwwrWXnndXVd_FLfwY3_kRelE-nV /root/backup
gdrive sync download 参数 GD目录ID 本地文件夹路径

参数:

–keep-remote 如果同步到本地的文件和GD上的相同,则保留GD上的
–keep-local 如果同步到本地的文件和GD上的相同,则覆盖GD上的
–keep-largest 如果同步到本地的文件和GD上的相同,则同步文件体积大的
–delete-extraneous 如果本地目录下存在GD上没有的文件,则删除本地文件夹下这些无关的文件

实例

比如某台VPS,安装了宝塔面板,已经在宝塔中添加定时备份数据库和网站文件到本机,现在需要定时把备份文件夹同步到GD上,脚本如下:

LocalDIRPath="/www/backup";
RemotePath="GD上备份文件夹的目录ID";
Args="--keep-local --delete-extraneous";
gdrive sync upload ${Args} ${LocalDIRPath} ${RemotePath};

在宝塔里添加执行该脚本的计划任务即可



评论(*号为必填项)