公開済データをGoogle Driveからダウンロードする(curlやwgetを使って)

筆者は機械学習のプログラムを扱うことが多いのだが,githubで公開されているコードの学習済みモデルや,データなどはGoogle Driveで公開されていることが多い.作業用のサーバーにSSHで接続すると,ブラウザを操作してダウンロードすることができないので不便である.

そこで本記事では,Google Drive上の一般公開されているデータをcurlとかwgetなど,CLIコマンドを用いてダウンロードしたいときの方法を紹介.

ファイルサイズが小さいとき

ファイルを右クリック > 共有可能なリンクを取得 > FILE_ID(“id="以降の文字列あるいは,URLの/d/以降にある文字列)を取得し,

wget "https://drive.google.com/uc?export=download&id=<FILE_ID>" -O <FILE_NAME>

を打ち込むと簡単にダウンロードできる.

リンクの取得に関して補足説明をする.

Google Driveにある公開済みのデータにアクセスする場合,下記のような画面が表示されるばずだ.この画面の右上にある,メニューボタン(白点が3つ縦に並んだボタン)を押し,共有ボタンを押すと,

下のような画面へと遷移するはずだ.ここでリンクをコピーのボタンを押すことでリンクが取得できる.

リンク取得の際の画面.

リンクをコピーで取得したリンクは,下記のような形式で書かれていることが多い.

https://drive.google.com/file/d/17eqDPTs0Sv83Q7e-IWox_69bCbiXUzPU/view

この例の場合,<FILE_ID>は,17eqDPTs0Sv83Q7e-IWox_69bCbiXUzPUとなる.<FILE_ID>が記載されたリンクの形式には多少の揺れがあるが,慣れている人なら大体この文字列がIDであることは何となくわかるのではないだろうか.

ファイルサイズが大きいとき

機械学習のモデルは大抵1G近くあったり,データの場合は数十Gのサイズであることが多い.Google Driveではファイルサイズが大きい場合,

のように,確認画面が表示されることがある.このため,ファイルサイズが小さいときのようにコマンド1行でダウンロードするのは不可能で,コマンドを実行したとしても謎のファイルがダウンロードされるだけで,望みのファイルをダウンロードすることができない.このため,ファイルサイズが大きい場合はひと手間加える必要がある.

上の画面でダウンロードを押すと,リンクにconfirm=XXXXという4文字のランダムな文字列が追加されていることがわかるため,

FILE_ID=17eqDPTs0Sv83Q7e-IWox_69bCbiXUzPU # ここには自分がダウンロードしたいファイルIDを入れる
curl -sc /tmp/cookie "https://drive.google.com/uc?export=download&id=<FILE_ID>" > /dev/null
CODE="$(awk '/_warning_/ {print $NF}' /tmp/cookie)"  
curl -Lb /tmp/cookie "https://drive.google.com/uc?export=download&confirm=${CODE}&id=<FILE_ID>" -o <FILE_NAME>

として4文字の文字列を抽出する処理を追加することでダウンロード可能となる.なお,上の処理では,FILE_IDを入力するだけで動かせるようななっているため,実際に使うときは2行目と3行目に変更を加える必要は無い.また,confirm=XXXXのXXXXをメモする必要もない.

以上の手順で,ファイルが大きい場合でもCLIでダウンロードすることができる.

本記事で例として挙げたIDは,以下のリポジトリから取得したものである.

https://github.com/hlwang1124/SNE-RoadSeg

CLI,Google Drive

Posted by vastee