Javascript 应用程序脚本-自动从Google Drive删除超过3天的文件-获取文件列表
我用我的谷歌硬盘在家里存储IP摄像头的运动检测记录。我正在运行以下脚本(稍加修改),以自动从我的Google Drive中删除3天以上的文件: 脚本设置为每天早上5点左右运行。我遇到的问题是,当有太多的文件要删除时,我会收到一个错误,说我已经超过了最大写入速率。这是因为set-trashed命令包含在for循环中。如果我添加一个睡眠来减慢循环,那么我会收到另一个错误,说脚本没有在允许的时间内完成 我可能只需要运行两三次,但那太笨重了Javascript 应用程序脚本-自动从Google Drive删除超过3天的文件-获取文件列表,javascript,file,date,google-apps-script,google-drive-api,Javascript,File,Date,Google Apps Script,Google Drive Api,我用我的谷歌硬盘在家里存储IP摄像头的运动检测记录。我正在运行以下脚本(稍加修改),以自动从我的Google Drive中删除3天以上的文件: 脚本设置为每天早上5点左右运行。我遇到的问题是,当有太多的文件要删除时,我会收到一个错误,说我已经超过了最大写入速率。这是因为set-trashed命令包含在for循环中。如果我添加一个睡眠来减慢循环,那么我会收到另一个错误,说脚本没有在允许的时间内完成 我可能只需要运行两三次,但那太笨重了 如何修改此脚本,使其创建要删除的文件的临时列表,并在最终退出
如何修改此脚本,使其创建要删除的文件的临时列表,并在最终退出循环时执行删除?我对GAS语言和语法没有太多的经验,所以细节将非常棒。此代码将返回所有超过30天的文件的文件ID。它与另一篇文章中引用的代码非常不同。您正在使用的代码中有一个已弃用的类DocsList现在不推荐使用。我给您的代码使用了DriveApp,并使用了
searchFiles()
方法
gs脚本
将打印检索到的文件的日期
上面的代码不会删除任何文件,也不会将任何内容设置为垃圾。它只是按日期搜索文件,并创建一个包含所有文件ID的数组
因此,删除或丢弃文件的函数可以首先调用该函数,并获得所有要处理的文件ID的列表
最好在不删除任何文件的情况下测试代码,以确保代码在运行删除任何文件的版本之前获得正确的文件
如果要删除文件而不先将其设置为“垃圾”,则可以这样做
下面的示例使用高级Google Drive服务。有关启用高级驱动器服务的当前方式,请参阅文档
//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的函数,如下所示:
警告这将删除文件而不将其发送到垃圾箱!***确保您知道要删除的内容!
函数deleteFiles(){
var arrayIDs=getFilesByDate();
对于(var i=0;i
我想出了另一个解决方案。这仅在谷歌硬盘文件与硬盘同步时有效
如果您的Google Drive文件与硬盘同步,那么如果您在本地硬盘文件夹中删除它们,它们也将从Google Drive中删除。因此,接下来的任务就是如何从Google文件夹中自动删除超过X天的文件
这是一个Windows Powershell脚本,允许您执行以下操作:
使用此配置运行脚本:
powershell -file c:\users\owner\documents\windows\deleteold\deleteold.ps1 -FolderPath "C:\Users\owner\Google Drive\iSpy\video\Bedroom" -FileAge 30 -logfile c:\users\owner\documents\windows\deleteold\logs\Bedroom.log -CreateTime -NoFolder
我可以从同步的谷歌硬盘“卧室”文件夹中删除所有超过30天的iSpy文件
遵循以下说明:
我能够使用Windows任务调度器自动运行脚本
问题解决。使用Sandy在上面发布的解决方案,我将其修改为特定于文件夹
function getOldFileIDs() {
var fileIDs = [];
// Old date is 30 days
var oldDate = new Date().getTime() - 3600*1000*24*30;
var cutOffDate = Utilities.formatDate(new Date(oldDate), "GMT", "yyyy-MM-dd");
// Get folderID using the URL on google drive
var folder = DriveApp.getFolderById('XXXXXXX');
var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');
while (files.hasNext()) {
var file = files.next();
fileIDs.push(file.getId());
Logger.log('ID: ' + file.getId() + ', Name: ' + file.getName());
}
return fileIDs;
};
function deleteFiles() {
var fileIDs = getOldFileIDs();
fileIDs.forEach(function(fileID) {
DriveApp.getFileById(fileID).setTrashed(true);
});
};
函数getOldFileIDs(){
var fileIDs=[];
//旧的日期是30天
var oldDate=new Date().getTime()-3600*1000*24*30;
var截止日期=Utilities.formatDate(新日期(旧日期),“GMT”,“yyyy-MM-dd”);
//使用google drive上的URL获取folderID
var folder=DriveApp.getFolderById('XXXXXXX');
var files=folder.searchFiles('modifiedDate<'+截止日期+'”);
while(files.hasNext()){
var file=files.next();
push(file.getId());
Logger.log('ID:'+file.getId()+',Name:'+file.getName());
}
返回文件ID;
};
函数deleteFiles(){
var fileIDs=getOldFileIDs();
forEach(函数(fileID){
DriveApp.getFileById(fileID).setTrashed(true);
});
};
如果您通过Google Drive同步了文件,您可以尝试FileSysWatcher:我成功地将其与第一个和最后一个函数一起使用,但我不确定我是否理解倒数第二个函数的用途(“idToDLET”代码)…名为
deleteFile
的函数仅删除一个文件并获取文件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]);
}
};
powershell -file c:\users\owner\documents\windows\deleteold\deleteold.ps1 -FolderPath "C:\Users\owner\Google Drive\iSpy\video\Bedroom" -FileAge 30 -logfile c:\users\owner\documents\windows\deleteold\logs\Bedroom.log -CreateTime -NoFolder
function getOldFileIDs() {
var fileIDs = [];
// Old date is 30 days
var oldDate = new Date().getTime() - 3600*1000*24*30;
var cutOffDate = Utilities.formatDate(new Date(oldDate), "GMT", "yyyy-MM-dd");
// Get folderID using the URL on google drive
var folder = DriveApp.getFolderById('XXXXXXX');
var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');
while (files.hasNext()) {
var file = files.next();
fileIDs.push(file.getId());
Logger.log('ID: ' + file.getId() + ', Name: ' + file.getName());
}
return fileIDs;
};
function deleteFiles() {
var fileIDs = getOldFileIDs();
fileIDs.forEach(function(fileID) {
DriveApp.getFileById(fileID).setTrashed(true);
});
};