公開済データをGoogle Driveからダウンロードする(curlやwgetを使って)
筆者は機械学習のプログラムを扱うことが多いのだが,githubで公開されているコードの学習済みモデルや,データなどはGoogle Driveで公開されていることが多い.作業用のサーバーにSSHで接続すると,ブラウザを操作してダウンロードすることができないので不便である.
そこで本記事では,Google Drive上の一般公開されているデータをcurlとかwgetなど,CLIコマンドを用いてダウンロードしたいときの方法を紹介.
ファイルサイズが小さいとき
ファイルを右クリック > 共有可能なリンクを取得 > FILE_ID(“id="以降の文字列あるいは,URLの/d/以降にある文字列)を取得し,
FILE_ID = <FILE_ID> 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であることは何となくわかるのではないだろうか.
この<FILE_ID>は,以下のリポジトリから取得したものである.
https://github.com/hlwang1124/SNE-RoadSeg
ファイルサイズが大きいとき
機械学習のモデルは大抵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でダウンロードすることができる.
ディスカッション
コメント一覧
まだ、コメントがありません