Skip to content

Instantly share code, notes, and snippets.

@leoherzog
Created September 29, 2017 19:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leoherzog/af69778a3409a3fbdcd69015acf1199c to your computer and use it in GitHub Desktop.
Save leoherzog/af69778a3409a3fbdcd69015acf1199c to your computer and use it in GitHub Desktop.
Transfer Ownership of Google Drive Folder and it's Contents

Transfer Ownership of Google Drive Folder and it's Contents

Set-up

  1. Make a new Google Sheet
  2. Go to Tools -> Script editor...
  3. Copy and paste the script from below (code.gs) over the sample function text, and save the project (any name will do)

Running to Transfer Ownership

  1. Run function #1 and wait
  2. Run function #2 and wait
  3. Run function #3 over and over for each folder. It will warn you when it's complete.
  4. When you're done, run the reset() function to begin again

Running to Just Get the Number of Folders This Will Affect

  1. Run the getNumberOfFolders() function and check the logs
// Welcome to the Google Drive Folder Ownership Transfer Tool
// This tool has several steps that need to be run individually,
// since scripts can time out after 6 minutes.
// Change the folder id below to the top-level folder that you want to transfer,
// and the email address of the person you want to transfer stuff to.
// Then, run the functions 1 and 2.
// Afterwards, you'll need to run function 3 over and over again until it's done :/
//
//
var folderId = "0BXXXXXXXXXXXXXXXXXXXXXXXXXX";
var userToTransferTo = "blah@gmail.com";
//
//
var allFolders = [];
function step1_LogFolderIdsToCellA1() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A:A");
var numberOfRows = range.getHeight();
Logger.log(numberOfRows);
if (numberOfRows > 1) {
sheet.deleteRows(2, numberOfRows - 1);
}
sheet.clear();
var topLevelFolder = DriveApp.getFolderById(folderId);
allFolders = [];
// let's get started! add our top-level id
allFolders.push(folderId);
// recurse and add allFolders with every subfolder id
populateAllFoldersArray(topLevelFolder);
Logger.log(allFolders.length + " folder(s) found.");
sheet.appendRow([allFolders.join(',')]);
return;
}
function step2_TransferOwnershipOfAllFolders() {
var ids = getIds();
for (var i in ids) {
var folder = DriveApp.getFolderById(ids[i]);
folder.setOwner(userToTransferTo);
}
return;
}
function step3_StepThroughTransferringOwnershipOfAllFilesInFolder() {
var properties = PropertiesService.getScriptProperties();
var ids = getIds();
var folderIndex = properties.getProperty("folderIndex");
if (!folderIndex) {
properties.setProperty("folderIndex", "0");
}
folderIndex = new Number(folderIndex);
if (ids.length == folderIndex) {
throw "You've transferred ownership of every folder! You should be done. Run the reset() function if you'd like to start again.";
}
Logger.log("We have " + ids.length + " folder(s) total. Transferring ownership of folder #" + folderIndex + "...");
var files = getFilesWithinFolder(ids[folderIndex]);
for (var i in files) {
var file = DriveApp.getFileById(files[i]);
file.setOwner(userToTransferTo);
}
folderIndex++;
properties.setProperty("folderIndex", folderIndex.toString());
return;
}
function getIds() {
var sheet = SpreadsheetApp.getActiveSheet();
var ids = sheet.getActiveCell().getValue();
ids = ids.split(',');
if (!ids.length || ids.length == 1) {
return {"Error": "Please run Step 1 first"};
}
Logger.log(ids.length + " Folder(s)");
return ids;
}
function getNumberOfFolders() {
var ids = getIds();
if (!ids.length) {
Logger.log("Looks like the pump hasn't been primed. Running Step 1...");
step1_LogFolderIdsToCellA1();
}
ids = getIds();
Logger.log("There are " + ids.length + " folder(s)");
return ids.length;
}
function reset() {
PropertiesService.getScriptProperties().deleteProperty("folderIndex");
var sheet = SpreadsheetApp.getActiveSheet();
var numberOfRows = sheet.getRange("A:A").getHeight();
if (numberOfRows != 1) {
sheet.deleteRows(2, numberOfRows - 1);
}
sheet.clear();
Logger.log("Reset! Ready to start at Step 1 again");
return;
}
// helper functions
function populateAllFoldersArray(folder) {
var subfolderIterator = folder.getFolders();
while (subfolderIterator.hasNext()) {
var subfolder = subfolderIterator.next();
populateAllFoldersArray(subfolder); // recurse by calling itself on each folder we find
allFolders.push(subfolder.getId());
}
}
function getFilesWithinFolder(folderId) {
var files = [];
var filesIterator = DriveApp.getFolderById(folderId).getFiles();
while (filesIterator.hasNext()) {
var file = filesIterator.next();
files.push(file.getId());
}
return files;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment