Another Google Drive CLI
I started getting an error message using the old grive CLI (setup instructions for grive can be found here:
grive/libgrive/src/protocol/AuthAgent.cc(174): Throw in function long int gr::AuthAgent::CheckHttpResponse(long int, const string&, const gr::http::Header&)
Dynamic exception type: boost::exception_detail::clone_impl<gr::http::Error>
[gr::http::HttpResponseTag*] = 400
[gr::http::UrlTag*] = https://docs.google.com/feeds/default/private/full/-/folder?max-results=50&showroot=true
[gr::http::HeaderTag*] = Authorization: Bearer ya29.hAHax8Pg3f6Yvs3dOCUw7_Fds8JF65MFyKQ6-bqwlCgsCO63kCvlPmbi5MzvOhyR8xxmQ2x1fvdfSg
GData-Version: 3.0
I found the issue on the original project’s git page, and it seems that other people have had luck with another tool called drive (instead of grive). There is also a fork of the original project call grive2, but I wanted to try out drive.
Install drive on Mac OS X or Linux
Most of the instructions are laid out here. First let’s install go:
$ sudo port install go
Now let’s compile the package:
$ mkdir $HOME/go
$ export GOPATH=$HOME/go
$ go get github.com/odeke-em/drive/cmd/drive
After it’s done you will see the binary under here:
$ ls ~/go/bin/
drive
You can just copy it to any standard location:
$ sudo cp ~/go/bin/drive /usr/local/bin/.
I followed similar steps on my Gentoo Laptop:
$ sudo emerge -av go
$ mkdir go
$ export GOPATH=$HOME/go
$ go get github.com/odeke-em/drive/cmd/drive
$ sudo cp go/bin/drive /usr/local/bin/.
For fedora or CentOS just run the following to install go:
$ sudo yum install golang
Sync Google Drive files using drive CLI
Most of the instructions are laid out here, but first create the directory to which you want to sync to:
$ mkdir gdrive
$ cd gdrive
$ drive init
Visit this URL to get an authorization code
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=352074-7rrlnuanmamgg1i4feed12dpuq871bvd.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive
Paste the authorization code: 4/KuddZ
Then you can pull your data with the following:
$ drive pull --hidden
..
..
+ /notes/BUILD_NOTES/aips/install.pl
+ /notes/BUILD_NOTES/aips/aips_war
+ /notes/BUILD_NOTES/aips/AIPS
Addition count 837 src: 6.82MB
Proceed with the changes? [Y/n]:y
7151948 / 7151948 [=============================================] 100.00 % 2m32
If you don’t want the prompt you can run the following:
$ drive pull --hidden --no-prompt
If you’ve modified a file and you want to push your changes you can run the following:
$ cd gdrive
$ drive push --hidden
Drive Usage
There are a bunch of commands, you can list them by just running the following (or check the git project page):
$ drive h
Usage: drive <command>
where <command> is one of:
diff compares local files with their remote equivalent
move move files/folders
trash moves files to trash
unpub revokes public access to a file
init initializes a directory and authenticates user
help Get help for a topic
pub publishes a file and prints its publicly available url
quota prints out information related to your quota space
share share files with specific emails giving the specified users specifies roles and permissions
touch updates a remote file's modification time to that currently on the server
version 0.2.2
delete deletes the items permanently. This operation is irreversible
copy copy remote paths to a destination
emptytrash permanently cleans out your trash
list lists the contents of remote path
pull pulls remote changes from Google Drive
push push local changes to Google Drive
stat display information about a file
unshare revoke a user's access to a file
about print out information about your Google drive
cp copy remote paths to a destination
features returns information about the features of your drive
ls lists the contents of remote path
mv move files/folders
rename renames a file/folder
untrash restores files from trash to their original locations
drive <command> -h for subcommand help
And if you need help on a specific command you can run the following:
$ drive pull -h
Usage of drive pull:
-exclude-ops="": exclude operations
-export="": comma separated list of formats to export your docs + sheets files
-export-dir="": directory to place exports
-force=false: forces a pull even if no changes present
-hidden=false: allows pulling of hidden paths
-id=false: pull by id instead of path
-ignore-checksum=true: avoids computation of checksums as a final check.
Use cases may include:
* when you are low on bandwidth e.g SSHFS.
* Are on a low power device
-ignore-conflict=false: turns off the conflict resolution safety
-ignore-name-clashes=false: ignore name clashes
-matches=false: search by prefix
-no-clobber=false: prevents overwriting of old content
-no-prompt=false: shows no prompt before applying the pull action
-piped=false: if true, read content from stdin
-quiet=false: if set, do not log anything but errors
-r=true: performs the pull action recursively
I like the quota flag:
$ drive quota
Name: Blah
Account type: LIMITED
Bytes Used: 10117676 (9.65MB)
Bytes Free: 16096009684 (14.99GB)
Bytes InTrash: 0 (0.00B)
Total Bytes: 16106127360 (15.00GB)
* Space used by Google Services *
Service Bytes
DRIVE 9.61MB
GMAIL 15.89MB
PHOTOS 5.87MB
Space used by all Google Apps 31.41MB
I also like how you can download specific files:
$ drive pull photos/img001.png docs