それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

google drive を コマンドから使うgdrive が早くて便利

Google Drive 使ってますか?

はい、私はほぼ無限容量を持っているので、Google Drive が大活躍しています。

Google DriveにログだのVMだの殆どをバックアップ出来て便利。

google drive をコマンドから使いたい

fuse なども色々有りますが、ocamlfuse の google dirve なども試しました。

go で書かれた gdrive が1番使いやすかった

github.com

インストール

macOS X の場合

brew install gdrive 

linux の場合、curl して chmod する

curl -JLO https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA&export=download 
chmod +x gdrive-linux-x64
mv gdrive-linux-x64 /usr/local/bin
alias gdrive=gdrive-linux-x64

使い方:OAuth キーの取得

とにかく最初に list する

gdrive list 

すると、認証URLを放ってくれるので、URLにアクセスして、認証トークンを頂いてくる

主な機能

  • アップロード
  • ダウンロード
  • フォルダ毎同期

とくに、フォルダ同期が便利で、fsevent に貼り付けてgdrive 起動したら、DropBoxイラネ!ってなる。

macOS X のlaunchdなら手軽にフォルダ監視スクリプトを登録できるから、DroboxやGoogleDriveの機能を手軽に作ることが出来る。

速度が早い

OcamlFuseを使ってたんだけど、gdriveの方が転送速度が早いので、主にコッチを使うことになると思います。

初回起動後のOAuth設定

初回起動し、OAuthを設定したら、ファイルが生成される

~/.gdrive/token_v2.json

これがトークンのファイル。ファイルを消せばもう一度初期設定からやり直せる。

基本的な操作方法

GoogleDriveのファイルの一覧

gdrive list 

list コマンドで、ファイルの一覧をだせる。この結果からわかるのがGoogleDrive特徴です。ドライブではファイルはID管理されていて、KVSになっているという点ですね。つまり、単純なファイルのキーの一覧になりますね。フラットな感じ。

ダウンロード

gdrive download XXxxxXXXXX

Id を指定してダウンロードする。

ディレクトリのダウンロード

ディレクトリのIDを指定して、GoogleDriveディレクトリをダウンロードするには、recursive オプションが必要でした。

gdrive download XXXXXX --recursive

カレントディレクトリにダウンロードできる。ディレクトリの中身がまるっと出てくるので楽チン

アップロード

gdrive upload my-file.rb 

GoogleDrive側のファイルを削除

gdrive delete XXXXXXXXXXXXXXX

目的のファイルが見つからないよ。。。

list してもファイルが見つからないことのほうが多いですよね。 query 使います。

gdrive list -q 'name contains "word" '

詳しくはここ。https://developers.google.com/drive/search-parameters

でも、マニュアル読んでもよくわからないですよね。

とりあえず、最初にこれ

  • name contains 'keyword'
  • modifiedTime >= '2016-07-24'
  • fullText contains 'keyword'
  • trashed = false

を覚えておいて。

この条件を and で繋げばいいんですよ。

とくに、ダウンロードするには trashed = false をつけないと、ゴミ箱のファイルを取り出しちゃうので注意が必要だった。

まとめてダウンロードしたい

検索結果をまとめて取出すには

gdrive list --no-header | cut  -d ' ' -f 1 | xargs ...

--no-header オプションと組み合わせると嬉しい感じ。

sync 同期 アップロード

ローカル→GoogleDriveへの同期アップロードも出来ます。

SyncするにはSync専用のディレクトリが必要なようです。空のディレクトリを作ります。

mkdir my-test
gdrive upload my-test
gdrive list 'name contains "my-test"'

ここで作られたIDを元に、同期したいディレクトリをサーバーへ転送します。

gdrive sync src ID_XXXXXXXXXXX

同期用に指定した空のディレクトリやファイルにはappPropertiesでフラグがたつらしい。このフラグを使って同期対象を識別し、同期処理を行うのに利用するみたいですね。

2016-12-21 追記

Google Drive は有料課金するとストレージ容量が無制限になるので、かなり遊べますよ