Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update script to include additional functions #1

Merged
merged 1 commit into from
Nov 28, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 39 additions & 9 deletions google-sharedrivecopy.gs
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
function start() {

//global variables to facilitate logging and email

PropertiesService.getScriptProperties().setProperty('sourceFolderIdGlobal', 'xxx');
PropertiesService.getScriptProperties().setProperty('targetParentFolderIdGlobal', 'xxx');
PropertiesService.getScriptProperties().setProperty('StartTime', new Date()); //get timestamp to record the intial execution time



{
// Google App Script to the rescue
// Code adapted from this artcile https://www.labnol.org/code/19979-copy-folders-drive
// Thank you Amit Agarwal https://github.com/labnol
Expand All @@ -7,44 +17,64 @@ function start() {
// If you have been driven insane by Google Drives inability to copy a folder structure from MyDrive to a Shared drive BOOM!
//
// Important note: Enable the Drive service in the script editor https://developers.google.com/apps-script/advanced/drive

var sourceFolderId = "XXXX"; //Folder ID of the folder structure you want to copy


var sourceFolderId = PropertiesService.getScriptProperties().getProperty('sourceFolderIdGlobal'); //Folder ID of the folder structure you want to copy
//Add target folder ID if you want the dest to be somewhere other than the root of Mydrive
var targetParentFolderId = "";
var targetParentFolderId = PropertiesService.getScriptProperties().getProperty('targetParentFolderIdGlobal');

var sourceFolder = DriveApp.getFolderById(sourceFolderId); //Source Folder

if (targetParentFolderId.length > 0 ) {
// If the target folder ID has been provided, create the target folder within that folder
var targetParent = DriveApp.getFolderById(targetParentFolderId); //Parent Folder (target)
console.log( "Create target folder: " + sourceFolder.getName() + " in " + targetParent.getName());
Logger.log( "Create target folder: " + sourceFolder.getName() + " in " + targetParent.getName()); //copy console entry into stored logger
var target = targetParent.createFolder(sourceFolder.getName()); //Create the source folder we are copying
} else {
// If the target folder ID is empty, create the target folder within the root of Mydrive
console.log( "Create target folder in Mydrive: " + sourceFolder.getName());

Logger.log( "Create target folder in Mydrive: " + sourceFolder.getName()); //copy console entry into stored logger
Logger.log( "Create target folder in Mydrive: " + sourceFolder.getName()); //copy console entry into stored logger
var target = DriveApp.createFolder(sourceFolder.getName()); //Create the source folder
}

//Here we go

Logger.clear; //Clear stored log data before next execution so we don't keep sending old data
var recipient = 'email@email.com'; //Destination email address to notify that script has started (for triggered executions)
var subject = 'MyDrive Copy Log';
var body = 'MyDrive Copy Started for folder pair: '+sourceFolderId+' to '+targetParentFolderId+"\n This script execution was started at "+ PropertiesService.getScriptProperties().getProperty('StartTime');
MailApp.sendEmail(recipient, subject, body);


copyFolder(sourceFolder, target);
console.log("Copy finish");
Logger.log("Copy finish"); //copy console entry into stored logger

var recipient = 'email@email.com'; //Destination email address to send final completion notice and the logged console data
var subject = 'MyDrive Copy Log';
var body = 'MyDrive Copy finished at '+ new Date()+';'+" The execution log is as follows: \n" +Logger.getLog();
MailApp.sendEmail(recipient, subject, body);

}
}

function copyFolder(source, target) {

function copyFolder(source, target) {
var folders = source.getFolders();
var files = source.getFiles();



while(files.hasNext()) {
var file = files.next();
console.log( "Copying file: " + file.getName());
Logger.log( "Copying file: " + file.getName()); //copy console entry into stored logger
file.makeCopy(file.getName(), target);
}

while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
console.log( "Copying folder: " + folderName);
Logger.log( "Copying folder: " + folderName); //copy console entry into stored logger
var targetFolder = target.createFolder(folderName);
copyFolder(subFolder, targetFolder);
}
Expand Down