Googleドライブの最終更新が古いファイルをoldフォルダに移す


概要

Googleドライブでアジェンダ等を管理している場合、
oldフォルダに古いファイルを移す作業が起きることが多いです。
今回は、最終更新日の古いファイルをoldフォルダに移すスクリプトを作成してみます。

ファイル/フォルダの最終更新日時は、<ファイル/フォルダオブジェクト>.getLastUpdated()で取得できます。

サンプルコード

サンプルコードは以下にもおいてあります。
サンプルコード

以下のコードの
・fromfolderid
・destfolderid
・day, hours, minutes, seconds, milliseconds
を編集してから実行してください。

idは各フォルダのURLの右端から取得できます。

moveoldfile.js
function moveOldFile () {
  // Config.
  var fromfolderid = "13Tp_byKCyt79QUjipzGxYEAKnrqoptVO";
  var destfolderid = "1THXNFdJ2_x62ZTZP43MLp1_loGpluQVF";

  // 5日 × 24時間 × 60分 × 60秒 × 1000ミリ秒
  // = つまり、5日以上古いファイルの場合移動する
  var day = 5;
  var hours = 24;
  var minutes = 60; 
  var seconds = 60;
  var milliseconds = 1000;

  // main.
  var from_folder = DriveApp.getFolderById(fromfolderid);
  var dest_folder = DriveApp.getFolderById(destfolderid);
  var files = from_folder.getFiles();
  var folders = from_folder.getFolders();

  // file.
  while (files.hasNext()) {
    var file = files.next();
    if (new Date() - file.getLastUpdated() > day * hours * minutes * seconds * milliseconds) {
      Logger.log(file.getName() + ": this file is move");
      file.makeCopy(file.getName(), dest_folder);
      file.setTrashed(true);
    }
  }

  // folder
  while (folders.hasNext()) {
    var folder = folders.next();
    if (new Date() - folder.getLastUpdated() > day * hours * minutes * seconds * milliseconds) {
      folderMove(folder, dest_folder);
      subFolder.setTrashed(true);
    }
  }
}

function folderMove(folder, dest) {
  var folders = folder.getFolders();
  var files = folder.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), dest);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var copyFolder = dest.createFolder(folderName);
    folderCopy(subFolder, copyFolder);
  }
}

サンプルコードの解説

①ファイル/フォルダの取得

Googleドライブのファイルやフォルダを取得します。
Googleドライブのシステムとして、ファイルとフォルダが明確にわけられています。

moveoldfile_pseudo.js
var from_folder = DriveApp.getFolderById(fromfolderid);
// file.
var files = from_folder.getFiles();
while (files.hasNext()) {
  var file = files.next();
  // if file is old, move to old folders.
}

// folder.
var folders = from_folder.getFolders();
while (folders.hasNext()) {
  var folder = folders.next();
  // if folder is old, move to old folders.
}

②ファイル/フォルダの最終更新日の取得

ファイルならばfile.getLastUpdated()
フォルダならばfolder.getLastUpdated()でできます。

③ファイル/フォルダの移動

GoogleAppsScriptは、ファイル/フォルダの移動ができません
そのため、ファイル/フォルダをコピーし、そのファイル/フォルダを削除することで擬似的に移動しています。
ファイル/フォルダの移動の詳細はGoogleドライブでファイルの移動を参考に。

実行結果

以上のコードを設置し、実行すると
最終更新日時が5日以上前のフォルダがoldフォルダに移動していることが確認されると思います。
(今回は検証の都合上1日以上前のファイルを移動しています)

【実行前】

【実行後】