【问题标题】:Adjust script that deletes files older than 30 days on Google Drive调整删除 Google Drive 上超过 30 天的文件的脚本
【发布时间】:2019-12-23 05:03:14
【问题描述】:

我有这个脚本可以从 Google Drive 中删除旧文件...我想对其进行调整,以便从特定文件夹中删除文件,特别是 3 小时前创建的文件。还有一个细节,文件夹不能为空,所以最新的文件即使发布超过3小时也不能删除。只有在文件夹中添加另一个文件时才能将其删除。我需要帮助才能完成这项工作,我无法编辑这些详细信息的脚本。

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);
  });
};

【问题讨论】:

    标签: google-apps-script google-drive-api


    【解决方案1】:
    • 您要删除modifiedDate &lt; 3 hours 的文件。
    • 具体文件夹中有文件。
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个修改呢?

    修改点:

    • 看到Search for Files的文档,对于modifiedDate,好像需要使用ISO格式。

    当上述点和modifiedDate &lt; 3 hours 反映到您的脚本中时,它变为如下。

    修改脚本:

    当你的脚本被修改时,请进行如下修改。

    从:
    var oldDate = new Date().getTime() - 3600*1000*24*30;
    var cutOffDate = Utilities.formatDate(new Date(oldDate), "GMT", "yyyy-MM-dd");
    

    收件人:

    var oldDate = new Date().getTime() - 3600*1000*3;
    var cutOffDate = new Date(oldDate).toISOString();
    

    参考:

    如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

    新增1:

    • 您要删除modifiedDate &lt; 3 hours 的文件。
    • 具体文件夹中有文件。
    • 您希望使用 Google Apps 脚本实现此目的。
    • 您想保留最新创建的文件。

    如果我的理解是正确的,那么这个修改呢?

    修改脚本:

    请修改getOldFileIDs()的功能如下。

    function getOldFileIDs() {
      // Old date is 30 days
      var oldDate = new Date().getTime() - 3600*1000*3;
      var cutOffDate = new Date(oldDate).toISOString();
    
      // Get folderID using the URL on google drive
      var folder = DriveApp.getFolderById('XXXXXXX');
      var files = folder.searchFiles('modifiedDate < "' + cutOffDate + '"');
    
      var obj = [];
      while (files.hasNext()) {
        var file = files.next();
        obj.push({id: file.getId(), date: file.getDateCreated()});
      }
      obj.sort(function(x, y) {return x.date < y.date ? 1 : -1});
      obj.shift();
      var fileIDs = obj.map(function(e) {return e.id});
      return fileIDs;
    };
    
    • 在此修改后的脚本中,检索到的文件按日期排序,并删除数组的顶部元素。这样,除了最新创建的文件之外的文件 ID 都会被返回。

    新增2:

    • 您想完全删除文件而不移动到垃圾箱。

    如果我的理解是正确的,那么这个修改呢?

    修改脚本:

    请修改deleteFiles()的功能如下。在运行脚本之前,please enable Drive API at Advanced Google services

    从:
    DriveApp.getFileById(fileID).setTrashed(true);
    
    到:
    Drive.Files.remove(fileId);
    
    • 通过此修改,文件 ID 被完全删除。所以当你测试这个时,请小心。

    【讨论】:

    • 非常感谢您的解释......仍然存在疑问的是文件夹是否永远不会为空,总是至少有1个文件,即使它有更多超过 3 小时的创作。文件夹不能为空。最新的文件必须始终保留,即使它是旧的(创建 3 小时或更长时间)。
    • @Frederico Mattos 感谢您的回复。我不得不道歉,我提出的脚本对你的情况没有用。从您的回复中,您想保留最新创建的文件。我可以这样理解。通过这个,我提出了一个更修改的脚本。你能确认一下吗?如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
    • 关于只保留 1 个文件的问题,我可以向您保证,它在几个小时内就可以工作,因为目前有几个文件在不到 3 小时内创建。我会回来告诉你它是否有效。但据我所见,它运行良好,我创建了一个触发器,该触发器将每 30 分钟激活一次,以便能够删除旧文件。我可以享受并再问你一件事吗?当文件进入垃圾箱时,它们会消耗谷歌驱动器内存吗?如果是这样,有什么方法可以永久删除文件而不进入垃圾箱?恐怕要填满 5 GB 的容量。
    • 非常感谢您愿意提供帮助,您不知道这会让我的日常工作变得更加轻松!很高兴你出现了。
    • 没问题的朋友!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多