2014/11/25

Google Apps Scriptを使ってDriveのファイルを移動する



Google Driveのあるフォルダに入っているファイルをGoogle Apps Scriptを使って別のフォルダに格納し直すということをしたかったので調べてみました。

あるフォルダ(tempA)に格納されているファイルを別のフォルダ(tempB)に移動させようとした場合には
(1)tempAのフォルダのファイルを調べる
(2)tempBのフォルダにtempAのファイルを複製する
(3)tempAのフォルダのファイルを削除する
という流れになるかと思い、この方法をGoogle Drive上でやろうとしたところ見事に失敗。

Google Apps ScriptにもGoogle Driveのファイルをコピーするという関数が用意されていますが残念ながらファイルサイズの制限に引っかかってしまい失敗。。

実際にはGoogle Driveのファイルの扱い方を理解すると非常に簡単。
実はGoogle DirveはGmail同様にフォルダに入っているのではなく、フォルダ名のラベルがファイルに付与されていると考えるとわかりやすいです。

ですので
(1)tempAのフォルダのファイルを調べる
(2)tempAのファイルにtempBのフォルダを付与(addToFolder)する
(3)tempAのファイルからtempAのフォルダ情報を削除(removeFromFolder)する
このような流れになります。
実際にこれをGoogle Apps Scriptに置き直すとこのようになります。
function moveA2B() {
  var INPUT = DocsList.getFolder('tempA');
  var OUTPUT = DocsList.getFolder('tempB');
  var files = INPUT.getFiles();
  for (var i in files) {
    Utilities.sleep(5000);   // 実行回数によるエラー回避
    files[i].addToFolder(OUTPUT);
    files[i].removeFromFolder(INPUT)
  }
};
tempAのフォルダ直下のファイルに対してtempBのフォルダ情報を付与し、tempAのフォルダ情報を削除する。ただし、tempA配下に格納されているフォルダは変更されない。
 ※たぶんこれで動くと思います。。。

ですのでシンボリックリンクのように複数のフォルダに一つのファイルが入っているようにすることも可能です。
ただ注意してほしいのはあくまでもフォルダを移動させるだけですので、バックアップを行うような場合にはファイルの複製を行わなければならないので注意してください。