Unshare Files and Folders using script from Google Drive

40 Views Asked by At

I was trying to unshare Files and Folders which are in the Google Drive using scripts mentioned in these links Google Drive Link Unshare https://github.com/HR/google-drive-unshare/blob/unshare-all/Code.gs

Execution Logs shows

11:16:53 AM Notice Execution started 11:16:53 AM Notice Execution completed

But still able to see the Folders and Files are still showing shared.

What exactly I am missing here?

Please help.

regards, Deepak

// create a Google Document
// Tools / Script Editor
// paste this in
// update line 13 and save
// hit play to run. you may have to run several times as the script will die after 5 or 6 minutes.

    function findSharedFolders() {
      // https://developers.google.com/apps-script/reference/drive/drive-app
      // https://developers.google.com/drive/web/search-parameters
      // http://stackoverflow.com/questions/21227771/how-do-i-script-google-drive-to-unshare-all-subfolders-and-files-given-a-folder
      // https://productforums.google.com/forum/#!topic/drive/p3LZQnRNB24

      var email = "[email protected]"; // <<<<< INSERT THE UNDESIRED EMAIL ADDRESS HERE

      var body = DocumentApp.getActiveDocument().getBody();
      body.appendParagraph(email).setHeading(DocumentApp.ParagraphHeading.HEADING1);
      var folders = DriveApp.searchFolders("'"+email+"' in writers");  while (folders.hasNext()) unshare_(folders.next(), body, email);
      var files   = DriveApp.searchFiles(  "'"+email+"' in writers");  while (  files.hasNext()) unshare_(  files.next(), body, email);
    }

    function unshare_(file, body, email) {
    // Logger.log(file.getName());
       var para = body.appendParagraph(file.getName());
       try { file.removeEditor(email); }
       catch (e) { para.setLinkUrl(file.getUrl()); para.appendText(" (" + e + ")"); }
    }
/**
 * Google Apps Script to completely unshare files/folders with someone and make
 * a copy of them 
 */

// Enter the email of the user to remove
// Leave blank if you want to remove all sharees
var userEmail = '[email protected]'
// Leave blank if you want to unshare all folders/files
var folderId
// Whether to make a copy of the folder/files not owned
var copyNotOwned = false

function main () {
  var folder
  if (folderId) {
    // Unshare just the folder (incl. subfolders/files)
    folder = DriveApp.getFolderById(folderId)
    unshareItems(folder, userEmail)
  } else {
    // Unshare all files/folders
    folder = DriveApp.getRootFolder()
    unshareItems(folder, userEmail)
  }

  if (copyNotOwned && userEmail) {
    copyUnownedItems(folder, userEmail)
  }
}

function unshareItems (folder, email) {
  unshare(folder, email)
  var query = `'${email}' in writers or '${email}' in readers`
  // Unshare all the files in the folder
  var files = email ? folder.searchFiles(query) : folder.getFiles()
  while (files.hasNext()) {
    unshare(files.next(), email)
  }
  // Unshare all the subfolders
  var folders = email ? folder.searchFolders(query) : folder.getFolders()
  while (folders.hasNext()) {
    unshare(folders.next(), email)
  }
}

function unshare (item, email) {
  try {
    if (email) {
      // Unshare with email
      item.removeEditor(email)
      Logger.log('Unshared ' + item.getName())
      return
    }
    // Unshare with all
    var sharees = [...item.getEditors(), ...item.getViewers()]
    sharees.forEach(function (sharee, index) {
      item.removeEditor(sharee.getEmail())
      Logger.log(`Unshared ${item.getName()} with ${sharee.getEmail()}`)
    })
  } catch (e) {
    Logger.log('Unsharing error: ' + e)
  }
}

function copyUnownedItems (folder, email) {
  // Copy unowned files
  var files = folder.searchFiles("'" + email + "' in owners")
  while (files.hasNext()) {
    let file = files.next()
    // Make a copy of the file
    let parent = file.getParent().next()
    file.makeCopy(file.getName(), parent)
    Logger.log('Copied unowned file ' + file.getName())
    parent.removeFile(file)
    Logger.log('Removed unowned file ' + file.getName())
  }
  // Copy unowned folders (incl. the files therein)
  var folders = folder.searchFolders("'" + email + "' in owners")
  while (folders.hasNext()) {
    let unownedFolder = folders.next()
    let parent = unownedFolder.getParent().next()

    let ownedFolder = parent.createFolder(unownedFolder.getName())
    Logger.log('Copied unowned folder ' + unownedFolder.getName())

    // Copu unowned folder files
    let folderFiles = unownedFolder.getFiles()
    while (folderFiles.hasNext()) {
      ownedFolder.addFile(folderFiles.next())
    }
    // Copu unowned folder subfolders
    let folderFolders = unownedFolder.getFolders()
    while (folderFolders.hasNext()) {
      ownedFolder.addFile(folderFolders.next())
    }
    
    parent.removeFolder(unownedFolder)
    Logger.log('Removed unowned folder ' + unownedFolder.getName())
  }
}type here
0

There are 0 best solutions below