Mk1*_*Mk1 0 google-apps-script google-drive-api
我想将所有文件和文件夹权限重置为“受限”。在整个驱动器上。
谷歌驱动器上的权限不会级联,因此从父文件夹中删除它们不会在子文件夹和文件中删除它们。我有大量的文件和文件夹。
我发现带有脚本的过时帖子,但“Uiapp”功能已被弃用(评论中有人说它可以删除一些文件,所以不是我真正想要的)
这是类似内容的过时帖子(不再工作): https: //webapps.stackexchange.com/questions/37592/how-do-i-reset-permissions-for-google-drive-documents-in-all-子文件夹
您可以使用 Drive API 检索所有文件,然后循环遍历它们,将权限设置为PRIVATE.
这里最棘手的部分是您拥有的文件数量无疑意味着脚本执行时间将远远超过 Apps 脚本限制。不过,您可以通过最初存储所有文件 ID,然后循环遍历它们,从上次执行时中断的位置继续来解决此问题。
由于 Drive API 比内置 API 更快DriveApp,因此我将在示例中使用它。运行前请确保启用驱动器高级服务。
function getAllFileIds() {
const fileIds = []
let files = Drive.Files.list({
pageSize: 1000
})
while (files.nextPageToken) {
console.log(files.nextPageToken)
fileIds.push(...files.files.map(x => x.id))
files = Drive.Files.list({
pageSize: 1000,
pageToken: files.nextPageToken
})
}
fileIds.push(...files.files.map(x => x.id))
const ss = SpreadsheetApp.create("Files List")
const sheet = ss.getSheetByName("Sheet1")
sheet.getRange(1, 1, fileIds.length, 1).setValues(fileIds.map(x => [x]))
PropertiesService.getScriptProperties().setProperty("sheet", ss.getId())
}
function changePermissions() {
const props = PropertiesService.getScriptProperties()
const sheet = SpreadsheetApp.openById(props.getProperty("sheet")).getSheetByName("Files List")
let ids
const curr = parseInt(props.getProperty("index"))
if (curr) {
ids = sheet.getRange(curr, 1, sheet.getLastRow() - curr, 1).getValues().flat(2)
}
else {
ids = sheet.getDataRange().getValues().flat(2)
}
ids.forEach(function(id, index) {
try {
console.log(id)
DriveApp.getFileById(id).setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW)
}
catch(e) {
console.info(e)
}
props.setProperty("index", index + 1)
})
}
Run Code Online (Sandbox Code Playgroud)
这个想法是这样的:
getAllFileIds()。这会:我选择记录每个文件nextPageToken,以便您可以看到它的运行情况 - 我的云端硬盘中有大约 16,800 个文件和文件夹,并且此功能需要一分钟左右的时间才能运行。
然后,您可以运行该函数changePermissions()。这会:
index值,则脚本从上次停止的位置开始index值,则脚本从列表的开头开始PRIVATE.您必须多次运行此命令。我建议创建一个基于时间的触发器,以便该函数运行多次,而无需手动重新运行。您可以在此答案中找到相关说明。
注意: Gmail 帐户的 Apps 脚本执行时间限制为 6 分钟,商业/企业帐户的执行时间限制为 30 分钟。设置可安装触发器时请记住这一点,以便各个脚本执行不会重叠。
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |