【问题标题】:Remove files from GDrive Trash从 GDrive 回收站中删除文件
【发布时间】:2020-05-02 21:53:39
【问题描述】:

我有将我的文件复制到 GDrive 的备份脚本,它还会删除 X 天之前的文件。但这正在用很多这些文件填满我的垃圾箱。我想把它们从垃圾桶里拿出来。

我写了这段代码:

function getTrashedFiles() {
  //find every file in bin
  var trashedSearch = DriveApp.searchFiles('trashed=true');
  while (trashedSearch.hasNext()) {
    var file = trashedSearch.next();
    if (file.getName().indexOf("DBKLP") >= 0) {
      //this is correctly printing files that I want to remove
      Logger.log(file.getName());
      //this should remove from bin
      DriveApp.removeFile(file);
    }
  }
}

此代码正确找到以“DBKLP”开头的每个文件。但是当它运行时,它不会从 bin 中删除文件。它只是“再次”删除它们,因此它们的删除日期基本上是“现在”。

我找不到“从 bin 中删除”的方法。

【问题讨论】:

  • 当您的问题还没有解决,您仍然想要解决方案时,我可以问您当前的问题吗?

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


【解决方案1】:

AppScript DriveApp 不支持它,但您可以使用 Drive API v3 来实现。正如documentation 所述,您需要使用DELETE HTTP 方法;与此类似,您甚至可以完全跳过丢弃这些文件。这是一个example(我的)关于如何将 Google API 与 AppScript 一起使用(这是另一个 API,但至少它是一个很好的起点)。文档与粗略示例相结合,有望将您推向正确的方向。

【讨论】:

    【解决方案2】:

    来自documentation:removeFile(child) 不会删除文件,但如果文件从其所有父项中删除,则无法在云端硬盘中看到该文件,除非通过搜索或使用“所有项目”视图.

    您是否尝试过Drive.Files.remove() 而不是DriveApp.removeFile()? 要启用它,在脚本编辑器中,您必须单击“服务”处的 + 按钮。检查这里:imgur.com/cVFCAXQ(或者,在旧编辑器中导航到资源 > 高级 Google 服务 > Drive API)。

    我有一个类似的脚本似乎可以工作。请注意,它必须找到所有文件 文件夹,因为它们是分开处理的。

    // Delete all files from trash older than 1 month
    function cleanOldTrash() {
      var files = DriveApp.getTrashedFiles();
      var folders = DriveApp.getTrashedFolders();
     
      var lastMonth = new Date();
      lastMonth.setDate(lastMonth.getDate() - 30);
      
      while (files.hasNext()) {
        var file = files.next();
        if (file.getLastUpdated() < lastMonth ) {
          Drive.Files.remove(file.getId());
        }
      }
      
      while (folders.hasNext()) {
        var folder = folders.next();
        if (folder.getLastUpdated() < lastMonth) {
         Drive.Files.remove(folder.getId());
      }
    }
    }
    

    当文件存储在我无权访问的团队云端硬盘的垃圾箱中时,我确实遇到了这个脚本的问题,但我会尝试在单独的问题中获得更多帮助。如果需要,我会更新这个答案。

    【讨论】:

    • 你好。 “TypeError:DriveApp.remove 不是函数”,在使用 Drive.Files.Remove 时出现“ReferenceError:未定义驱动器”。但是你让我意识到我正在删除不在我的文件夹中的文件,它只是共享文件夹。但我仍在尝试将其从垃圾箱中删除。
    • @ĽubošCsonka 我认为您需要手动启用 Drive API v3。导航到资源 > 高级 Google 服务 > Drive API 并启用它。让我知道它是否有效。我用一些关于你为什么必须这样做的信息改变了答案。
    • Drive.Files.remove(file.getId()); 在这一行上,它说驱动器未定义。为我启用了 Drive API。因为所有 DriveApp 调用都运行良好。
    • 不幸的是,getLastUpdated 不是文件被装箱/垃圾箱的日期,而是文件最后一次修改的日期(在它被装箱/垃圾箱之前)。无法通过 API 获取分箱日期(仅在 UI 中按日期排序)
    • @AdilMalik 在新编辑器中,您必须通过单击“服务”中的 + 来启用它。在这里查看:imgur.com/cVFCAXQ
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2018-03-03
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多