コマンドでGoogle Driveにファイルを転送する

サーバのバックアップファイルをGoogle Driveに保存する方法について調べました。
gdcp を使って転送できたので、記録を残しておきます。

Contents

gdcp

gdcp(Google Drive cp)は強力で高速なGoogle Driveへのファイル転送を行うコマンドラインツールです。
使い方はLinux/Unixサーバのscpに似ています。
大容量のファイル転送に対応しており、MD5 checksumの確認や再帰的フォルダのアップロード/ダウンロードをサポートしています。

gdcpのインストール

必要ライブラリをpipで新ストールします。


$ pip install pydrive
$ pip install backoff

任意のディレクトリにソースコードをダウンロードしてユーザのパスにコピーします。


$ git clone https://github.com/ctberthiaume/gdcp.git
$ cp gdcp/gdcp ~/bin

※この例ではユーザディレクトリの~/binにパスが通っています。

セットアップ

インストール後、最初にgdcpを実行した時次のように表示されます。

- Visit https://console.developers.google.com/
- Create a new project and select it
- Under 'APIs' make sure the 'Drive API' is turned on
- Under 'Credentials' create a new OAuth client ID
  Choose 'Installed -> Other' for application type
- Click 'Download JSON' to download the secrets file
- Copy the secrets file to /home/hoge/.gdcp/client_secrets.json

指示に従ってセットアップを実行します。

1. https://console.developers.google.com/にアクセスしてプロジェクトを作成します。

2. ライブラリからDrive APIを選択し有効にします。
Google Drive APIを選択する

3. 認証情報から「認証情報の作成」 > 「OAuthクライアント ID」を選択し、クライアントIDを生成します。
※「その他 のクライアント ID」を選択します。
クライアントIDの作成

4. ダウンロードボタンをクリックしてJSONファイルをダウンロードします。
JSONファイルをダウンロード

5. ダウンロードしたJSONファイルをユーザディレクトリの.gdcpディレクトリにclient_secrets.jsonとして保存します。

6. もう一度gdcpを実行すると次のように表示されるので、表示されたURLにアクセスします。

Go to the following link in your browser:
()
    https://accounts.google.com/o/oauth2/auth?redirect_uri=....
()

7. ブラウザ上で「許可」をクリックすると認証コードが表示されるのでコンソールに入力します。
APIを認証する

Authentication successful. と表示されれば認証成功です。

Enter verification code: 
Authentication successful.
usage: gdcp [-h] {version,list,download,upload,transfer} ...
gdcp: error: too few arguments

Google Driveへのファイル転送

ファイルの転送は転送先/転送元のフォルダIDを指定します。
フォルダIDはGoogle Driveにブラウザで任意のフォルダにアクセスした時のURLを確認します。

Google DriveのURL:

https://drive.google.com/drive/folders/xxx...

URLがこのようなら、xxx…の部分がフォルダIDです。

ファイルリストの取得

指定のフォルダに含まれるファイルのリストを取得するコマンド


gdcp list -i フォルダID

Google Driveからダウンロード

指定のフォルダに含まれる任意のファイルを1つダウンロードする場合のコマンド


gdcp download -i フォルダID ファイル名

指定のフォルダに含まれるファイルを全てダウンロードする場合のコマンド
ファイル名のところに .(ドット)を指定すると指定のフォルダ内のファイルを全てダウンロードします。


gdcp download -i フォルダID .

Google Driveへのアップロード

ファイルをアップロードするコマンド
ファイルパスにディレクトリを指定するとフォルダ配下のファイルが再帰的にアップロードされます。


gdcp upload -p フォルダID ファイルパス