Google apps script 谷歌应用程序脚本永久删除旧文件并保留最后100个文件

Google apps script 谷歌应用程序脚本永久删除旧文件并保留最后100个文件,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,我在我的根google驱动器中创建了一个包含视频文件(.avi)的文件夹。我需要写一个谷歌应用程序脚本永久删除旧的视频文件时,文件总数超过100个文件?i、 e删除除最后(更新)100个文件以外的所有视频文件 每个文件的名称与创建此文件的时间有关示例:2013-02-25_uu20-29-45-01.avi 2013-02-25_uu20-24-49-09.avi 2013-02-25_uu18-26-24-08.avi 因此,我认为脚本应该首先按字母顺序列出这些文件,从新文件开始,以旧文件结

我在我的根google驱动器中创建了一个包含视频文件(.avi)的文件夹。我需要写一个谷歌应用程序脚本永久删除旧的视频文件时,文件总数超过100个文件?i、 e删除除最后(更新)100个文件以外的所有视频文件

每个文件的名称与创建此文件的时间有关示例:2013-02-25_uu20-29-45-01.avi

2013-02-25_uu20-24-49-09.avi

2013-02-25_uu18-26-24-08.avi

因此,我认为脚本应该首先按字母顺序列出这些文件,从新文件开始,以旧文件结束,然后保留前100个文件,并永久删除所有其他文件。
我知道如何在bash脚本中实现这一点,但在google drive中却不知道,我认为google drive使用的是javascript(.gs)。

正如我在评论中所说,您提到的脚本离您想要的并不远。。。但我承认你们的情况有点复杂,所以假设这将是sto政治的另一个例外;-)

也就是说,我没有彻底测试这段代码,所以可能需要一些调整。在整个脚本中,我留下了几个注释日志来测试中间结果,请不要犹豫使用它们。另外,考虑更新邮件地址,不要忘记
setTrashed
可以手动反转;-)(在尝试新代码时更好)

编辑:今天早上我花了一些时间测试脚本,它有几个“近似值”;-) 这里有一个“干净”的版本,运行良好

function DeleteMyOldAvi() {
    var pageSize = 200;
    var files = null;
    var token = null;
    var i = null;
    var totalFiles = []
    var toDelete = []
    Logger.clear()

    do {
    var result = DocsList.getAllFilesForPaging(pageSize, token);
    var files = result.getFiles()
    var token = result.getToken();
        for(n=0;n<files.length;++n){
            if(files[n].getName().toLowerCase().match('.avi')=='.avi'){
              totalFiles.push([files[n].getName(),files[n].getDateCreated().getTime(),files[n].getId()]);// store name, Date created in mSec, ID in a subarray
//            Logger.log(files[n].getName()+' created on '+Utilities.formatDate(files[n].getDateCreated(), 'GMT','MMM-dd-yyyy'))
            }
          }    
     } while (files.length == pageSize);// continue until job is done

     totalFiles.sort(function(x,y){ // sort array on milliseconds date created (numeric/descending)
                var xp = x[1];
                var yp = y[1];
                return yp-xp ;
                 });
//     Logger.log(totalFiles.length)

       if(totalFiles.length>100){

        for(nn=totalFiles.length-1;nn>=100;nn--){
          toDelete.push(totalFiles[nn]) ;// store the files to delete
           }
//       Logger.log(toDelete)

        for(n=0;n<toDelete.length;++n){
          var file = toDelete[n]
          DocsList.getFileById(file[2]).setTrashed(true);// move to trash each file that is in the toDelete array
          Logger.log(file[0]+' was deleted');// log the file name to create mail message
          }
          MailApp.sendEmail('myMail@gmail.com', 'Script AUTODELETE report', Logger.getLog());// send yourself a mail
       }else{
          MailApp.sendEmail('myMail@gmail.com', 'Script AUTODELETE report', 'No file deleted');// send yourself a mail
       }
 } 
函数DeleteMyOldAvi(){
var pageSize=200;
var文件=null;
var-token=null;
var i=null;
var totalFiles=[]
var toDelete=[]
Logger.clear()
做{
var result=DocsList.getAllFilesForPaging(页面大小,令牌);
var files=result.getFiles()
var token=result.getToken();
对于(n=0;n100){
对于(nn=totalFiles.length-1;nn>=100;nn--){
toDelete.push(totalFiles[nn]);//存储要删除的文件
}
//Logger.log(toDelete)

对于(n=0;不确定是否有人会为您做这项工作,这不是sto应该如何工作的…对Serge表示尊重,是的,我知道,有一些例外…;-)我发现这个想法对我的个人用途很有意思…顺便说一句,这只需要一些修改就可以使它适用于您的用例,尝试一下,我会很高兴(或其他人)如果你遇到问题,我会提供帮助。在这里发布我的问题之前,我花了两天的时间试图编辑上面链接中的代码,但没有成功,因此我在这里写下了我的请求。感谢Serge为编写脚本所做的努力,我今天将测试它并返回给你。好的,谢谢,你解决了我问题的第一部分,它将旧的排序(avi)超过100个文件,但它会将它们发送到垃圾箱!而不是永久删除它们!我的意思是我想永久删除它们,因为将文件发送到垃圾箱不会在google drive中释放一些空间!你知道如何永久删除它们吗?唉,在GAS中,没有直接的方法可以删除文件而不将其发送到垃圾箱,也无法清空垃圾箱…我我认为使用外部API的调用是可能的,但我建议在这个问题上提出一个新的问题,因为我不知道如何……(而且我也感兴趣。)。同时,请考虑接受这个答案,它值15分,不是吗?