請負とかをやっていると、設計書をこっちのメンバーと顧客側で違う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