You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Google Apps Script(JavaScript)删除谷歌云端硬盘重复文件及修正代码

如何用Google Apps Script删除谷歌云端硬盘的重复文件

嘿,我明白你想清理云端硬盘里的重复文件,先给你捋清楚核心思路,再修正你的代码——毕竟单纯靠文件名判断重复太不靠谱了,不同文件可能同名,真重复的文件也可能改了名,得用更准确的方式来识别。

核心判断逻辑

要准确识别重复文件,建议结合文件名+文件大小+最后修改时间来做唯一标识,这三个维度都一致的文件,基本可以确定是重复的。如果追求绝对精准,还可以计算文件的MD5哈希值,但读取文件内容会慢一些,适合小批量文件。

你的代码问题点

你的原始代码有几个明显的问题:

  • 没初始化folder变量,脚本不知道该遍历哪个文件夹
  • 判断重复的逻辑错误:Getfile.getFilesByName(Getfile.getName())返回的是文件迭代器,不能直接和数字比较
  • 没有递归遍历子文件夹,只能处理当前文件夹的文件

修正后的完整可运行脚本

下面是可以直接用的脚本,包含递归遍历和准确的重复判断,我加了详细注释:

function deleteDuplicateFiles() {
  // 替换成你要清理的文件夹ID,或者用DriveApp.getRootFolder()获取根目录
  const targetFolder = DriveApp.getFolderById("你的文件夹ID");
  // 用对象存储文件标识和对应的文件数组
  const fileMap = {};

  // 递归遍历所有文件夹和文件的函数
  function traverseFolder(folder) {
    // 处理当前文件夹里的文件
    const files = folder.getFiles();
    while (files.hasNext()) {
      const file = files.next();
      // 生成唯一标识:文件名+大小+修改时间(精确到秒,避免毫秒级差异)
      const fileKey = `${file.getName()}-${file.getSize()}-${Math.floor(file.getLastUpdated() / 1000)}`;
      
      // 把文件加入对应标识的数组
      if (!fileMap[fileKey]) {
        fileMap[fileKey] = [];
      }
      fileMap[fileKey].push(file);
    }

    // 递归处理子文件夹
    const subFolders = folder.getFolders();
    while (subFolders.hasNext()) {
      traverseFolder(subFolders.next());
    }
  }

  // 开始遍历目标文件夹
  traverseFolder(targetFolder);

  // 处理重复文件
  for (const key in fileMap) {
    const duplicateFiles = fileMap[key];
    // 如果同一标识下有多个文件,保留第一个,删除剩下的
    if (duplicateFiles.length > 1) {
      Logger.log(`找到重复组:${key},共${duplicateFiles.length}个文件`);
      for (let i = 1; i < duplicateFiles.length; i++) {
        const fileToDelete = duplicateFiles[i];
        Logger.log(`待删除文件:${fileToDelete.getName()}(ID:${fileToDelete.getId()})`);
        // 先看日志确认没问题,再取消下面的注释执行删除(移到回收站)
        // fileToDelete.setTrashed(true);
      }
    }
  }

  Logger.log("扫描完成!先检查日志确认要删除的文件,再开启删除功能");
}

使用步骤

  1. 打开Google Apps Script新建项目
  2. 粘贴代码,替换你的文件夹ID(从云端硬盘文件夹URL里提取,比如https://drive.google.com/drive/folders/XXX里的XXX)
  3. 先运行一次,按提示完成授权
  4. 查看日志(编辑器顶部「查看」→「日志」),确认要删除的文件是否正确
  5. 确认无误后,取消// fileToDelete.setTrashed(true);的注释,再次运行脚本即可

重要提醒

  • 先备份! 建议先复制目标文件夹做测试,没问题再处理原文件夹
  • 脚本默认把文件移到回收站,不是永久删除,误删还能恢复
  • 如果文件数量极多,脚本可能超时,分批次处理子文件夹即可

内容的提问来源于stack exchange,提问作者Thomas Chirwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:44:37