-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathCode.gs
88 lines (79 loc) · 2.5 KB
/
Code.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* Google Apps Script to completely unshare files/folders with someone and make
* a copy of them
*/
// Enter the email of the user to remove
var userEmail = 'example@gmail.com'
// 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) {
copyUnownedItems(folder, userEmail)
}
}
function unshareItems (folder, email) {
unshare(folder, email)
// Unshare all the files in the folder
var files = folder.searchFiles("'" + email + "' in writers")
while (files.hasNext()) {
unshare(files.next(), email)
}
// Unshare all the subfolders
var folders = folder.searchFolders("'" + email + "' in writers")
while (folders.hasNext()) {
unshare(folders.next(), email)
}
}
function unshare (item, email) {
try {
item.removeEditor(email)
Logger.log('Unshared ' + item.getName())
} catch (e) {
Logger.log(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())
}
}