LoginSignup
3
4

More than 5 years have passed since last update.

GoogleAppsScriptでGoogleDriveのフォルダ間同期を行う

Last updated at Posted at 2018-08-21

請負とかをやっていると、設計書をこっちのメンバーと顧客側で違うGoogleDriveに
配置して管理しないといけないことって良くありますよね。

そんな時に、このスクリプトを作って配置して、1時間おきとかに起動させれば
更新のあったファイルを自動的に別のフォルダに同期してくれます。


function sync() {
  // コピー先フォルダID https://drive.google.com/drive/u/0/folders/XXXXXXXXXXX
  var save_folder = DriveApp.getFolderById("1eXXXXXXXXSWSXXXXXXXXUt");

  // コピー元フォルダID
  var folder = DriveApp.getFolderById("1LZXXXXXX4bUbXXXXXXXXXnFwE2");

  // 例:xlsのファイルを対象にファイルを探す。  
  // コピー元フォルダの全ファイル取得
  var files = folder.getFiles()
  var spreadsheet_ids = [];
  while (files.hasNext()) {
    var file = files.next();
    var file_name = file.getName() ;

    // .xlsか確認。全ファイル対象にするならこのif文を外す。
    if (file_name.match(/xls/)) {      
      var id = file.getId();
      var last_update = Utilities.formatDate(file.getLastUpdated(), 'Asia/Tokyo', 'yyyyMMddHHmmss');
      var fileItr = save_folder.getFilesByName(file_name);

      // コピー先フォルダにおなじ名前のファイルが無いか確認
      if (fileItr.hasNext()) {
        itr = fileItr.next();
        var itr_last_update = Utilities.formatDate(itr.getLastUpdated(), 'Asia/Tokyo', 'yyyyMMddHHmmss');

        // あった場合は更新日を見てコピー元のほうが最近更新されていたらアップする。
        if (itr_last_update < last_update) {
          save_folder.removeFile(fileItr.next());
          file.makeCopy(file_name, save_folder)
        }

        // コピー先フォルダに無い場合は強制的にアップする。
      } else {
        file.makeCopy(file_name, save_folder)
      }
    }
  }

}

ちなみに

formatDate(date, timeZone, format)

は、GoogleAppsScriptの便利関数です。
https://developers.google.com/apps-script/reference/utilities/utilities#formatdatedate-timezone-format

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4