如何使用javascript的app脚本删除谷歌驱动器中的重复文件?

时间:2018-01-08 09:31:30

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

我想识别Google云端硬盘中的重复文件并将其删除。请引导或更正我的代码。

while (folder.hasNext()) {
        var folders = folder.next();
        var Getfiles = folders.getFilesByName(file.getName());
        Logger.log("Folder Name: " + folders.getName());
        while (Getfiles.hasNext()) {
          var Getfile = Getfiles.next();
          if(Getfile.getFilesByName(Getfile.getName()) >1)
          //I don't know what to do here
        }
      }

2 个答案:

答案 0 :(得分:1)

我的问题是你如何将文件定义为重复文件,你似乎只是检查名称是否相同。那些不同目录中的文件,不同大小的文件,或者它们是否有不同的日期。你想保留哪一个?

如果我这样做,我会检查文件名,位置和日期,以确保我有最新的文件。

我会运行file.list并获取我的Google云端硬盘帐户中每个文件的列表。然后我会按目录在本地对文件进行排序,然后按名称和日期排序。一旦文件被排序,我将运行它们如果有多个文件我会向每个重复文件发送一个file.delete给谷歌。这里的问题是你将不得不在本地进行所有的比较。

从技术上讲,您还可以执行file.list然后循环浏览每个文件并向google提出另一个file.list请求,询问q参数以查找其他同名文件。检查返回的内容并删除与我们正在检查的文件位于同一目录中的任何返回文件,并使其具有更新的日期。当您向Google提出更多请求时,此解决方案会占用更多配额。

答案 1 :(得分:0)

这是我的工作代码,我希望它可以帮助一些可能需要类似东西的人。

 for (var msgIdx=0; msgIdx<messages.length; msgIdx++) {
        var message = messages[msgIdx];
        Logger.log("INFO:       Processing message: "+message.getSubject() + " (" + message.getId() + ")");
        var messageDate = message.getDate();
        var attachments = message.getAttachments();
        for (var attIdx=0; attIdx<attachments.length; attIdx++) {
          var attachment = attachments[attIdx];
          Logger.log("INFO:         Processing attachment: "+attachment.getName());
          try {
            var folder = getOrCreateFolder(rule.folder);
            var getFoldersByName = DriveApp.getFoldersByName(rule.folder);
             var newFilename = Utilities.formatDate(messageDate, config.timezone, rule.filenameTo.replace('%s',message.getSubject()));
             while (getFoldersByName.hasNext()) {
              var FetchhedFolders = getFoldersByName.next();
              var GetFiles = FetchhedFolders.getFiles();
              while (GetFiles.hasNext()) {
                var files = GetFiles.next();
                var GetFileName = FetchhedFolders.getFilesByName(newFilename);
                if(GetFileName.hasNext() )
                {
                  FetchhedFolders.removeFile(newFilename);
                }else if (!GetFileName.hasNext())
                {
                 var file = folder.createFile(attachment);                               
                 if (rule.filenameFrom && rule.filenameTo && rule.filenameFrom == file.getName()) {
                  Logger.log("INFO:           Renaming matched file '" + file.getName() + "' -> '" + newFilename + "'");
                  file.setName(newFilename);
                }
                else if (rule.filenameTo) {
                  var newFilename = Utilities.formatDate(messageDate, config.timezone, rule.filenameTo.replace('%s',message.getSubject()));
                  Logger.log("INFO:           Renaming '" + file.getName() + "' -> '" + newFilename + "'");
                  file.setName(newFilename);
                }
                file.setDescription("Mail title: " + message.getSubject() + "\nMail date: " + message.getDate() + "\nMail link: https://mail.google.com/mail/u/0/#inbox/" + message.getId());
                Utilities.sleep(config.sleepTime);
                }
              }
            }

          } catch (e) {
            Logger.log(e);
          }
        }
      }