google-apps-script - 在 Apps 脚本中使用大文件夹
问题描述
我有一个文件夹,里面有超过 50,000 个文件,而且它太大了,即使获取所有文件 ID 也会导致 6 分钟超时。事实上它太大了,我什至无法计算文件的数量。这是我为计算文件而制作的脚本。如果它没有运行,请道歉。我将其修改为在此处发布以使其更易于阅读。
//This requires the Drive API To be turned on in the Advanced Google Services
function (folder){
var allDriveFiles = folder.getFiles();
var query = 'trashed = false and "' + folder.getId() +'" in parents';
var counter =0;
var pageToken
do {
var filesInFolder = Drive.Files.list({q: query,maxResults: 100, pageToken: pageToken});
counter += filesInFolder.items.length;
pageToken = filesInFolder.nextPageToken;
Logger.log('filesInFolder: ' + counter);
} while (pageToken);
Logger.log('filesInFolder: ' + counter);
}
第一个 Logger.log 在那里,因为它总是在到达第二个之前超时。它通过超时获得大约 13000 个文件。
那么问题来了:
有没有更好的方法来计算文件夹中的文件?
如果我想使用一个巨大的文件夹并且我想删除某些文件,有没有一种不错的方法呢?目前我已经创建了第二个文件夹,如果需要,我可以删除该文件或将当前文件移动到第二个文件夹。这样我会慢慢清空这个巨大的文件夹,删除我不想要的文件,或者将我想要保留的文件移动到另一个文件夹。当我达到 6 分钟时,我重新运行该文件并继续。顺便说一句,这非常慢。我已经在这里坐了 4 个小时,而这项工作只完成了一部分。
解决方案
Apps 脚本有其局限性。
根据您拥有的帐户类型,您的脚本最大运行时间可以是:
- 6 分钟- 如果您使用以下帐户类型之一:消费者帐户、Google Workspace 免费版、Google Workspace Basic;
- 30 分钟- 如果您使用的是 Google Workspace 商业/企业/教育帐户;
但是,由于您想要检索如此大量的文件并且您已经在使用 Drive Advanced 服务,因此最好的解决方案是使用 Drive API 本身。
一种解决方案是从此处的 Drive API v3 Node.js 快速入门开始,然后根据您的需要进行调整。
参考
推荐阅读
- go - 如果未提供证书,单元测试 tls.LoadX509KeyPair 将失败
- php - 寻找在模型视图和控制器之间传递数据的最佳方式
- python - 根据Python中的计数器值将列表拆分为多个子列表
- ios - 如何从弹出视图控制器获取数据到自定义表格视图单元格?
- ionic-framework - 使用 appium 单击“离子切换”
- c - char 和 char 之间的比较不起作用
- javascript - 在javascript中使用url_for动态添加flask表达式以显示img元素
- json - Using Symfony's serializer library to use a value in a sub-object
- swift - tableview 单元格中的pickerview 不起作用
- android - RecyclerView“无法解析符号”错误,-Android Studio