The reason I need to do this search is the need to remove sharing access for all files located in the specific directory (let's say "OLD" folder). I added folders with files there in a daily basis. I tried to remove access from the top: from the "OLD" folder, but it only removes access from the folder itself, not from the stuff in it. I can of course star the files which I move to the folder "OLD" and then to remove sharing access I can just search for is:starred, select all results and then remove access, but it is kind of inconvenient, as, e.g. I may sometimes forget to star the files before moving them to "OLD". I would prefer the easy way, even some link to bookmark, because I do that kind of access removal regularly (let's say weekly). If I can't find a way to do it, then I will go ahead to learn and write some Google Script to do that.
Google-drive – How to search files in a specific folder and all its subfolders on Google Drive
access-controlgoogle-appsgoogle-drivesharing
Related Solutions
I installed Vidar’s script and works very well for files, but wouldn't reset permissions on folders. So, I changed a little bit the code to make the folders also inherite the permissions from their upper folder.
Two important disclaimers:
- I don't know if the original intention was to leave folders unchanged. Or even if it worked well for everybody but me, and this solutions was unnecesary. It worked for me.
- This is the first script I do, so it is very likely that it is not very efficient and may content some errors. Please feel free to correct it and improve it.
I only changed the doResetPermissions
function, but I paste all the code for simplicity reasons.
var selectedFolder;
var dialog;
function doGet() {
var app = UiApp.createApplication();
var heading = app.createHTML("<h1>Folders for</h1>");
app.add(heading);
var allFoldersIterator = DriveApp.getFolders();
var text = app.createTextArea().setName("text").setId("output");
app.add(text);
var tree = app.createTree();
var rootFolder = DriveApp.getRootFolder();
var treeRoot = app.createTreeItem(rootFolder.getName()).setId(rootFolder.getId());
var handler = app.createServerHandler("folderSelected");
tree.addItem(treeRoot);
tree.addSelectionHandler(handler);
treeRoot.setState(true);
createBranch(rootFolder, treeRoot, app);
app.add(tree);
var selectedFolderIdBox = app.createTextBox().setName("selectedFolderIdBox").setId("selectedFolderIdBox");
app.add(selectedFolderIdBox);
return app;
}
function createBranch(folder, branch, app) {
var children = folder.getFolders();
while (children.hasNext()) {
child = children.next();
Logger.log("Folder id: " + child.getId());
var subBranch = app.createTreeItem(child.getName()).setId(child.getId());
branch.addItem(subBranch);
createBranch(child, subBranch, app);
}
}
function folderSelected(eventInfo) {
var app = UiApp.getActiveApplication();
var parameter = eventInfo.parameter;
Logger.log("Selected " + eventInfo.parameter.selected);
selectedFolder = DriveApp.getFolderById(eventInfo.parameter.selected);
var selectedFolderIdBox = app.getElementById("selectedFolderIdBox");
selectedFolderIdBox.setValue(eventInfo.parameter.selected);
var okHandler = app.createServerHandler("okResetPermissions");
okHandler.addCallbackElement(selectedFolderIdBox);
dialog = app.createDialogBox(true, true);
var panel = app.createFlowPanel();
dialog.add(panel);
dialog.setId("confirmationDialog");
dialog.setPopupPosition(100, 100).setSize(500, 500);
panel.add(app.createLabel("Do you want to reset permissions for all files found in folder " + selectedFolder.getName() + " and its subfolders?\n (Click outside of the dialog box to cancel)"));
panel.add(app.createButton("Do it!", okHandler));
dialog.show();
return app;
}
function okResetPermissions(eventInfo) {
var selectedFolderId = eventInfo.parameter.selectedFolderIdBox;
var selectedFolder = DriveApp.getFolderById(selectedFolderId);
Logger.log("Resetting permissions on " + selectedFolder.getName());
var app = UiApp.getActiveApplication();
app.getElementById("confirmationDialog").hide();
Logger.log("Confirmation dialog hidden");
var progressIndicator = app.createDialogBox(false, true);
progressIndicator.setId("progressIndicator");
progressIndicator.setPopupPosition(100, 100).setSize(500, 500);
var label = app.createLabel("Working ...");
progressIndicator.add(label);
progressIndicator.show();
doResetPermissions(selectedFolder, function() {
var app = UiApp.getActiveApplication();
var progressIndicator = app.getElementById("progressIndicator");
progressIndicator.hide();
return app;
});
return app;
}
function doResetPermissions(selectedFolder, callback) {
Logger.log("Resetting permissions on folder " + selectedFolder.getName());
var sharingAccess = selectedFolder.getSharingAccess();
var sharingPermission = selectedFolder.getSharingPermission();
var viewersfolder = selectedFolder.getViewers();
Logger.log("Number of Viewers in folder: " + selectedFolder.getName() + " = " + viewersfolder.length);
for (var i = 0; i < viewersfolder.length; i++) {
Logger.log(" Removing viewer " + viewersfolder[i].getEmail());
selectedFolder.removeViewer(viewersfolder[i]);
}
var editorsfolder = selectedFolder.getEditors();
Logger.log("Number of Editors in folder: " + selectedFolder.getName() + " = " + editorsfolder.length);
for (var i = 0; i < editorsfolder.length; i++) {
Logger.log(" Removing editor " + editorsfolder[i].getEmail());
selectedFolder.removeEditor(editorsfolder[i]);
}
var files = selectedFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
Logger.log(" Resetting permissions on file " + file.getName());
file.setSharing(sharingAccess, sharingPermission);
var viewers = file.getViewers();
Logger.log("Number of Viewers in file: " + file.getName() + " = " + viewers.length);
for (var i = 0; i < viewers.length; i++) {
Logger.log(" Removing viewer " + viewers[i].getEmail());
file.removeViewer(viewers[i]);
}
var editors = file.getEditors();
Logger.log("Number of editors in file: " + file.getName() + " = " + editors.length);
for (var i = 0; i < editors.length; i++) {
Logger.log(" Removing editor " + editors[i].getEmail());
file.removeEditor(editors[i]);
}
}
var children = selectedFolder.getFolders();
while (children.hasNext()) {
var child = children.next();
doResetPermissions(child);
}
if (callback) {
callback();
}
}
Yes, deleting a shared file will delete it from the the shared drive and ultimately the delete will propogate to all other synced devices.
You can just do an experiment: Delete a shared file that no one cares about and see what happens. Create a dummy file if you need to. Or just "undelete" the file from your trash bin (if you are syncing to a device that implements a trash bin concept) once you've run the experiment.
See also this post on the Google forums.
Related Topic
- Google-drive – When someone leaves a shared Google Drive, do they take their files with them
- Google-drive – What’s the best way to take ownership of a personal non-GSuite Google Drive folder
- Google Drive – Where Shared Files Go After Deletion
- Google-drive – What happens to the file in shared folder after shared folder is no longer shared
- Google-sheets – Get List of *new* Google Drive Files within Specific Folder (including subfolders) into Google Sheet
Best Answer
The question was asked over in the Google product forums.
There are some solutions but there is no formal way in the Google Drive web interface.