Skip to content

Instantly share code, notes, and snippets.

@rschiang
Created August 6, 2013 14:11
Show Gist options
  • Save rschiang/6164824 to your computer and use it in GitHub Desktop.
Save rschiang/6164824 to your computer and use it in GitHub Desktop.
SITCON 2013 行政組自動化管理專案。
/*
* Author: Poren Chiang <ren.chiang@gmail.com>
* 這程式會試圖清查所有未交割所有權的文件。
*/
var outputSheetId = "RS0123456789SITCONabcdefghijklmnopqrstuvwxyz"; // 輸出試算表的位置
var rootFolderId = "SITCON2013abcdefghijklmnopqr"; // 根資料夾的位置
var correctEmail = "sitcon.tw@gmail.com"; // 檔案正確的擁有者
var closed = [];
var currentSheet;
function main() {
var spreadsheet = SpreadsheetApp.openById(outputSheetId);
currentSheet = spreadsheet.insertSheet(new Date().toString());
enumerateFolder(rootFolderId, "");
}
function indexOf(array, obj) {
for (var i = 0; i < array.length; i++)
if (array[i] == obj)
return i;
return -1;
}
function enumerateFolder(id, path) {
// Prevent re-entry
if (indexOf(closed, id) >= 0)
return;
closed.push(id);
Logger.log("Entering " + path);
// List folders
var folder = DriveApp.getFolderById(id);
var files = folder.getFiles();
var file;
while (files.hasNext()) {
file = files.next();
try {
if (file.getSize() > 0) continue; // Blobs cannot change owner
if (file.getAccess(correctEmail) == DriveApp.Permission.OWNER) continue;
}
catch (e) {}
var docFile = DocsList.getFileById(file.getId());
var fileName, fileOwner;
try { fileName = file.getName(); }
catch (e) { fileName = file.getId(); }
try { fileOwner = docFile.getOwner().getEmail(); }
catch (e) {}
if (fileOwner && (fileOwner.indexOf("gmail.com") < 0)) continue;
writeToSheet({ "name": fileName, "path": path, "owner": fileOwner });
}
var subfolders = folder.getFolders();
var subfolder;
while(subfolders.hasNext()) {
subfolder = subfolders.next();
var isOwner = false;
try {
isOwner = (subfolder.getAccess(correctEmail) == DriveApp.Permission.OWNER);
}
catch (e) {}
if (!isOwner) {
var docFile = DocsList.getFolderById(subfolder.getId());
var fileName, fileOwner;
try { fileName = subfolder.getName(); }
catch (e) { fileName = subfolder.getId(); }
try { fileOwner = docFile.getOwner().getEmail(); }
catch (e) {}
if (fileOwner && (fileOwner.indexOf("gmail.com") < 0)) continue;
writeToSheet({ "name": fileName, "path": path, "owner": fileOwner });
}
enumerateFolder(subfolder.getId(), path + "/" + subfolder.getName());
}
}
function writeToSheet(item) {
currentSheet.appendRow([item["name"], item["path"], item["owner"]]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment