Custom workflow to download or upload specific Google Drive files
I had an interest in downloading and uploading a specific file into my Google Drive at certain timing points. For examples sake, let's call the files "Designs.cad". There is a command line project on GitHub which is Go based. So if you have Go installed, it is just a matter of running:
This will download from source, so if you don't want to do this or if you don't have Go installed (you should - there are lots of great go projects), you can see a list of releases on the project page - https://github.com/prasmussen/gdrive - which you can download and place in your system somewhere, with the command becoming "gdrive".
When you first install it, you will need to authenticate your account. Running any command will prompt you to go to a URL to get an authorization code and paste in back on your console. So for example, if I run:
Which is designed to list files in my Drive. After running the command, if you haven't previsouly authenticated, you will be prompted to go to a URL to paste the authorization code. Sample output:
Where xxx is the verification code I pasted back in.
If successful, you will end up with a file at: $HOME/.gdrive/token_v2.json, containing on the necessary authorization codes so the program can continue to function whilst ever the authorization exists for this application.
So, looking at the help, there are two commands that will be useful - download and update.
We can find out the program usage with the help command, like so for the download operation.
To use this, I need to find the file ID, which I can do by using the list command, or looking at the web interface of Google Drive. The filename will be the same as that as it is on Google Drive. So, with that information I end up with the command:
Which gives output like so:
Similarly, to send the file in the other direction, we need to look at the usage for the command update
That means, our command will become:
go get github.com/prasmussen/gdrive
This will download from source, so if you don't want to do this or if you don't have Go installed (you should - there are lots of great go projects), you can see a list of releases on the project page - https://github.com/prasmussen/gdrive - which you can download and place in your system somewhere, with the command becoming "gdrive".
When you first install it, you will need to authenticate your account. Running any command will prompt you to go to a URL to get an authorization code and paste in back on your console. So for example, if I run:
gdrive list
Which is designed to list files in my Drive. After running the command, if you haven't previsouly authenticated, you will be prompted to go to a URL to paste the authorization code. Sample output:
trent@birroth:~$ gdrive list Authentication needed Go to the following url in your browser: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id... Enter verification code: xxx
Where xxx is the verification code I pasted back in.
If successful, you will end up with a file at: $HOME/.gdrive/token_v2.json, containing on the necessary authorization codes so the program can continue to function whilst ever the authorization exists for this application.
So, looking at the help, there are two commands that will be useful - download and update.
We can find out the program usage with the help command, like so for the download operation.
$ gdrive help download Download file or directory gdrive [global] download [options]global: -c, --config Application path, default: /home/trent/.gdrive --refresh-token Oauth refresh token... --access-token Oauth access token... --service-account Oauth service account filename... options: -f, --force Overwrite existing file -s, --skip Skip existing files -r, --recursive Download directory recursively... --path Download path --delete Delete remote file when download is successful --no-progress Hide progress --stdout Write file content to stdout --timeout Set timeout in seconds...
To use this, I need to find the file ID, which I can do by using the list command, or looking at the web interface of Google Drive. The filename will be the same as that as it is on Google Drive. So, with that information I end up with the command:
gdrive download --path /home/trent/ --force 1GUG3Y3Ce56Pa0k2
Which gives output like so:
Downloading Designs.cad -> /home/trent/Designs.cad Downloaded 1GUG3Y3Ce56Pa0k2 at 18.2 KB/s, total 18.2 KB
Similarly, to send the file in the other direction, we need to look at the usage for the command update
$ gdrive help update Update file, this creates a new revision of the file gdrive [global] update [options]global: -c, --config Application path, default: /home/trent/.gdrive --refresh-token Oauth refresh token... --access-token Oauth access token... --service-account Oauth service account filename... options: -p, --parent Parent id... --name Filename --description File description --no-progress Hide progress --mime Force mime type --timeout Set timeout in seconds... --chunksize Set chunk size in bytes...
That means, our command will become:
gdrive update 1GUG3Y3Ce56Pa0k2 /home/trent/Designs.cad