如何同步两个 Google Drive 文件夹

Posted

技术标签:

【中文标题】如何同步两个 Google Drive 文件夹【英文标题】:How to Sync Two Google Drive Folder 【发布时间】:2020-02-11 22:59:41 【问题描述】:

我的 Google 云端硬盘帐户中有两个文件夹; Folder 1Folder 2。我将在Folder 1 中上传一个文件,我希望将文件从Folder 1 复制到Folder 2,但如果它已经存在于Folder 2 中,则不应复制它。这是我得到的脚本,但是当它运行时,它总是将Folder 1 中的所有可用文件复制到Folder 2

function copyfile() 
  var sourceFolderName = "Folder 1";
  var destinationFolderName = "Folder 2";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  var files = source_folder.getFiles();
  var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();
  while (files.hasNext()) 
    var srcFile = files.next();
    var newName = srcFile.getName();
    srcFile.makeCopy(newName, dest_folder);
  

【问题讨论】:

【参考方案1】:

我已经修改了您的代码,以便:

    获取目标文件夹中所有文件名的列表。 对于每个要复制的文件,它首先检查该名称是否在上述列表中。如果是,它不会创建它的副本。

修改代码

function copyfile() 
  var sourceFolderName = "Folder 1";
  var destinationFolderName = "Folder 2";
  var source_folder = DriveApp.getFoldersByName(sourceFolderName).next();
  var files = source_folder.getFiles();
  var dest_folder = DriveApp.getFoldersByName(destinationFolderName).next();

  var destination_files = [];
  var fileIterator = dest_folder.getFiles()
  while (fileIterator.hasNext())
    destination_files.push(fileIterator.next().getName());

  while (files.hasNext()) 
    var srcFile = files.next();
    var newName = srcFile.getName();
    if (destination_files.indexOf(newName) == -1) 
      srcFile.makeCopy(dest_folder);
    
  

【讨论】:

以上是关于如何同步两个 Google Drive 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Google Drive连接共享文件夹

sh 安装Grive,在Linux VPS上同步文件到Google Drive

两个 Google Drive 共享驱动器之间的自动同步

如何在 Google Drive Sync 创建的云目录中创建文件夹?

Google网络应用/脚本,用于自动将文件上传到特定的g-drive文件夹

将数据库与 Android 设备和 Google Drive 同步