Skip to content

Instantly share code, notes, and snippets.

@qgustavor
Created September 4, 2016 18:40
Show Gist options
  • Save qgustavor/6a1b6ab701f73a4cdec2e2b491babb33 to your computer and use it in GitHub Desktop.
Save qgustavor/6a1b6ab701f73a4cdec2e2b491babb33 to your computer and use it in GitHub Desktop.
// In case of "Exceeded maximum execution time" retry after some time
// Copied files and folders will not be copied again
// Changes:
// - Don't "search" for source and target folders
// - Inline some variables (to make it run faster)
// - Avoid Logger when possible (it can make script slower)
function start() {
var source = DriveApp.getFolderById('get-source-folder-id-in-link');
var target = DriveApp.getFolderById('get-target-folder-id-in-link');
copyFolder(source, target);
}
function copyFolder(source, target) {
var files = source.getFiles();
while (files.hasNext()) {
var file = files.next();
var fileName = file.getName();
if (!target.getFilesByName(fileName).hasNext()) {
// Only copy if not exists
try {
file.makeCopy(fileName, target);
} catch(e) {
// Some files can't be copied, log them:
Logger.log('Copy failed for ' + fileName);
}
}
}
var folders = source.getFolders();
while (folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var existentFolder = target.getFoldersByName(folderName);
// Only create folder if not exists
var targetFolder = existentFolder.hasNext() ?
existentFolder.next() : target.createFolder(folderName);
copyFolder(subFolder, targetFolder);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment