おはこんばんちは。 尾藤 a.k.a. BTO です。
前回からだいぶ時間がたってしまいましたが、Google Driveのデータを Google Drive にバックアップする話です。
結論から言うと、Google Drive to Google Drive でバックアップするツール gdsync を作りました。 公開しているので、よかったら使ってみてください。
インストール
Pythonユーザーなら、使い方は簡単で、pip install gdsync するだけです。 すると、gdsync というコマンドがインストールされます。
pip install gdsync
client_secrets.json を取得する
gdsync で Google Drive のデータをバックアップするには、Google Drive へのアクセス権が必要です。 そのために、Google Drive API にアクセスできるようにするための client_secrets.json ファイルを作りましょう。
こちらの Step.1 を参考に、client_secrets.json をダウンロードします。
Python Quickstart | Drive REST API | Google Developers
作成した client_secrets.json を ~/.gdsync に置きます。
mkdir ~/.gdsync cp client_secrets.json ~/.gdsync
使い方
コピー元とコピー先の Google Drive のフォルダIDを指定するだけです。
gdsync xxxxxx yyyyyy
xxxxxx のフォルダの中身が、全て yyyyyy にコピーされます。
最初実行した時は、まだ credential ファイルがないので、Google 認証が必要です。 ブラウザの認証画面が表示されますので、そのまま必要な権限を持つアカウントで認証してください。
認証が成功すると、~/.gdsync/credentials.json に認証情報が保存されます。 2回目移行は認証の必要はありません。
レジューム機能
ファイル数が多くなると、実行している途中で失敗することがよくあります。 そのためにレジューム機能を用意しています。 --resume オプションをつけると、レジューム機能が有効になります。
gdsync --resume xxxxxx yyyyyy
同期が終了したフォルダの情報が、~/.gdsync/gdsync.db にたまっていきます。 次回以降は、既に同期が終了したフォルダは処理がスキップされるようになります。
新しく始めるときは、~/.gdsync/gdsync.db を削除してください。 そうしないと、一度同期が終わったフォルダはずっと同期がされないままになってしまいますので。
gdsync をライブラリとして使用する
gdsync はコマンドラインツールとしてだけではなく、ライブラリとしても使用できます。
例えば、UUUM では、Google Drive の個人用フォルダに、作業用という名前のフォルダがあると、自動的にバックアップをとるような仕組みを導入しています。 この仕組みを使って、クリエイティブユニットが制作している動画のデータを自動的にバックアップするようなシステムを運用しています。
こんな感じプログラム(抜粋)で処理しています。
# -*- coding: utf-8 -*- from __future__ import unicode_literals from uuum.job.common import JobCommon from gdsync.google.sync import Sync class Job(JobCommon): def execute(self): src_folder = self.drive.open(self.config['source_id']) dest_folder = self.drive.open(self.config['destination_id']) for res in src_folder.list(): self._sync(res, dest_folder) def _sync(self, src_folder, dest_folder): if not src_folder.is_folder(): return work_folder = src_folder.find_folder('作業用') if work_folder is None: return print('%s/%s' % (src_folder.name, work_folder.name)) Sync( work_folder, dest_folder.create_folder(src_folder.name), **self._create_sync_kwargs() ).sync()
UUUM での使用例
UUUM では社員で共有しているファイルのバックアップに使用しています。 これで誰かが誤ってデータを削除してしまっても、いつでもバックアップ先からコピーして戻すことができるようになります。
UUUM では事業の特性上、動画データを多く扱います。 Google Drive であれば無制限のライセンスを購入すれば、いくらでもアップロードできますので、大量のデータをバックアップしても大丈夫です。
まとめ
スギ花粉が想像よりも早く終わったので、快適に仕事ができます。