gpt4 book ai didi

javascript - Apps 脚本 - 自动从 Google Drive 中删除超过 3 天的文件 - 获取文件列表

转载 作者:行者123 更新时间:2023-11-29 10:13:13 25 4
gpt4 key购买 nike

我正在使用我的 Google 云端硬盘来存储来自家中 IP 摄像机的运动检测记录。我正在运行以下脚本(稍作修改)以自动从我的 Google Drive 中删除超过 3 天的文件:

Automatically delete files in google drive

脚本设置为每天早上 5 点左右运行。我遇到的问题是,当要删除的文件太多时,我收到一条错误消息,提示我已超出最大写入速率。这是因为 set trashed 命令包含在 for 循环中。如果我添加 sleep 以减慢循环速度,则会收到另一个错误,指出脚本未在允许的时间内完成。

我可能只运行它 2 或 3 次,但这很笨重。

我如何修改这个脚本让它创建一个要删除的文件的临时列表,并在它最终跳出循环时执行删除?我对 GAS 语言和语法没有太多经验,所以具体细节会非常棒。

最佳答案

此代码将返回所有超过 30 天的文件的文件 ID。它与另一篇文章中引用的代码非常不同。您正在使用的代码中有一个已弃用的类。 DocsList 现已弃用。我提供给您的代码使用了 DriveApp,并使用了 searchFiles() 方法。

Google Documentation - Search Files

gs 脚本

function getFilesByDate() {
var arrayOfFileIDs = [];

var ThirtyDaysBeforeNow = new Date().getTime()-3600*1000*24*30;
// 30 is the number of days
//(3600 seconds = 1 hour, 1000 milliseconds = 1 second, 24 hours = 1 day and 30 days is the duration you wanted
//needed in yr-month-day format

var cutOffDate = new Date(ThirtyDaysBeforeNow);
var cutOffDateAsString = Utilities.formatDate(cutOffDate, "GMT", "yyyy-MM-dd");
//Logger.log(cutOffDateAsString);

var theFileID = "";

//Create an array of file ID's by date criteria
var files = DriveApp.searchFiles(
'modifiedDate < "' + cutOffDateAsString + '"');

while (files.hasNext()) {
var file = files.next();
theFileID = file.getId();

arrayOfFileIDs.push(theFileID);
//Logger.log('theFileID: ' + theFileID);
//Logger.log('date last updated: ' + file.getLastUpdated());
}

return arrayOfFileIDs;
//Logger.log('arrayOfFileIDs: ' + arrayOfFileIDs);
};

您可以取消对 Logger.log() 语句的注释,运行代码,并根据需要查看代码返回的内容。以下 Logger.log() 语句:

//Logger.log('date last updated: ' + file.getLastUpdated());

将打印检索到的文件的日期。

以上代码不会删除任何文件,也不会将任何内容设置为已删除。它只是按日期搜索文件,并创建一个包含所有文件 ID 的数组。

因此删除或删除文件的函数可以首先调用该函数并获取要处理的所有文件 ID 的列表。

最好先在不删除任何文件的情况下测试代码,以确保代码在运行删除任何内容的版本之前获取正确的文件。

如果您想在不先将文件设置为已删除的情况下删除文件,可以这样做。

以下示例使用高级 Google 云端硬盘服务。有关启用高级驱动器服务的当前方法,请参阅文档。

//To delete a file without first sending it to the trash requires the Advanced Drive API to be enabled

function deleteFile(idToDLET) {
idToDLET = 'the File ID';

//This deletes a file without needing to move it to the trash
var rtrnFromDLET = Drive.Files.remove(idToDLET);
}

要调用获取要删除的文件 ID 的函数,它看起来像这样:

警告!这会删除文件而不会将它们发送到垃圾箱! **** 确保您知道正在删除的内容!

function deleteFiles() {
var arrayIDs = getFilesByDate();

for (var i=0; i < arrayIDs.length; i++) {
Logger.log('arrayIDs[i]: ' + arrayIDs[i]);
//This deletes a file without needing to move it to the trash
var rtrnFromDLET = Drive.Files.remove(arrayIDs[i]);
}
};

关于javascript - Apps 脚本 - 自动从 Google Drive 中删除超过 3 天的文件 - 获取文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com