動機
google drive上にある議事録などのファイルを階層構造付で一覧化したい時があった。
ネットで検索するとgoogle app scriptを使用してgoogleスプレッドシートに吐き出すというやり方の記事が多いが、treeコマンドの結果のような形式でファイル一覧が作成したかったため、やってみた。
手順
1.ファイル一覧を作成したいgoogle driveにログインし、Google Colaboraroryのファイルを作る。
google drive→新規→その他→Google Colaborarory
2.以下の4セルの内容を貼り付ける
# google driveをGoogle Colaboraroryからアクセスできる場所にマウントする
from google.colab import drive
drive.mount('/content/drive')
# Google Colaborarory環境にはtreeが入っていないので入れる
!sudo apt-get install tree
# /path/to/dirはtreeを発行したいディレクトリに変更
%cd drive/MyDrive/path/to/dir
!tree -N
3.セルを順番に実行していく
以下のセルの実行をすると、google driveへの認証を求められる。指示に沿って認証を行う。
from google.colab import drive
drive.mount('/content/drive')
順番に実行していくと以下のような結果が得られる。
!tree -N
.
├── dir1
│ ├── 基本設計
│ │ ├── file1
│ │ ├── file2
│ │ ├── file3
│ │ ├── dir2
│ │ │ ├── file4
│ │ │ └── file5
│ │ ├── file6
.
.
.
なぜGoogle Colaboraroryを使うのか
treeコマンドを発行するだけであればgoogle APIを使用すればできそうではあるものの、会社で使用しているgoogle driveの場合は外部API認証が出来ない場合があるため、Google Colaboraroryを使用した。
外部API認証が出来ない場合とは、google関連のサービスに二段階認証を設定している場合。
二段階認証をONにしていなければ、設定の[安全性の低いアプリの許可]から許可を行うことで外部APIからdriveにアクセスできるようになるが、会社全体で二段階認証をONにしている場合、treeコマンドを発行したいというだけで二段階認証をOFFにするわけにもいかない。そういう場合はGoogle Colaboraroryからdriveにアクセスすることで、認証で弾かれる事態を防ぐことができる。
参考
他の方法として、OAuth2.0に対応させた形でgoogle driveにアクセスできるようにすればそれでもtreeコマンドは実行可能である。(が、treeを発行するためだけにそこまでやるのは面倒な気もする。)
参考2