Search code examples
google-apps-scriptgoogle-drive-api

Google Apps Script : Save a copy of shared folders


In Google Docs 'Add to Drive' does not save the folders to one's drive, it merely adds a link to the user's drive. Whenever a change is made on one side, it is readily reflected on the other. It includes deletion and update of files.

I want to save copies of the folders to "My Drive" (better if it can be done for particular set of users), so that it is isolated from the copy of the person who shared it. The following function, lists all the folders sharedWithMe.

function SearchAndSave() {
  var folders = DriveApp.searchFolders('sharedWithMe');
  while (folders.hasNext()) {
   var folder = folders.next();
   Logger.log(folder.getName()); 

 }
}

I thought of makeCopy().makeCopy() works for files. Does it work for folders too?


Solution

  • Finally got the script working.It is somewhat crude though. Just blindly clones all the folders shared with me.

    function start() {
    
       var folders = DriveApp.searchFolders('sharedWithMe');
       while (folders.hasNext()) {
       var sourceFolder = folders.next();
       var targetFolder = 'Copy of ' + sourceFolder;
       Logger.log(sourceFolder);
       Logger.log(targetFolder);
    
      var source = DriveApp.getFoldersByName(sourceFolder);
      var target = DriveApp.createFolder(targetFolder);
    
      if (source.hasNext()) {
        copyFolder(source.next(), target);
      }
    
     }
    }
    
    function copyFolder(source, target) {
    
      var folders = source.getFolders();
      var files   = source.getFiles();
    
      while(files.hasNext()) {
        var file = files.next();
        file.makeCopy(file.getName(), target);
      }
    
      while(folders.hasNext()) {
        var subFolder = folders.next();
        var folderName = subFolder.getName();
        var targetFolder = target.createFolder(folderName);
        copyFolder(subFolder, targetFolder);
      }  
    
    }
    

    Only one problem, in case of large number of shared folders the script terminates with Execution failed: Exceeded maximum execution time [362.575 seconds total runtime]. Please suggest if you have any idea.