尝试将我不拥有的文件从共享驱动器复制到个人驱动器

时间:2019-07-20 17:55:45

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

我是一名教育工作者,并且在学校的Google云端硬盘上拥有我创建和共同创建的内容。我要离开学校,并尝试复制我创建和共同创建的课程。学校驱动器在带有子文件夹的主文件夹中拥有我是所有者而不是所有者的文件。我们的技术人员说可以尝试下面的代码,但是我遇到了错误,并且学校没有进一步的支持。

我尝试在Google Drive应用程序中共享文件,然后尝试通过输入我的文件夹名称尝试使用下面的代码,但是在代码的第22行给我一个错误。除了打开每个文件并手动保存外,我不知道该怎么办。在7/26请帮助之前,我只能访问共享驱动器!

function duplicate() {
var sourceFolder = "5-8 Shared Humanities";
  var targetFolder = "Copy of humanities curriculum from FSMN";

  var source = DriveApp.getFoldersByName(sourceFolder);
  var target = DriveApp.createFolder(targetFolder);

  if (source.hasNext()) {
    copyFolder(source.next(), target);
  }

}

function copyFolder(source, target) {

  var folders = source.getFolders();
  var files   = source.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(), target);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);
  }  

}

我希望代码将文件结构和所有所有者的所有文件从共享驱动器复制到我创建的新个人驱动器。似乎我仍然遇到我不拥有的文件的文件权限问题。我收到以下错误:

访问被拒绝:DriveApp。 (第22行,文件“代码”)

2 个答案:

答案 0 :(得分:0)

我在与我共享的东西上尝试了您的脚本,这两个脚本都具有修改权限并且只是只读的,并且运行良好。

该错误通常与驱动器应用程序被禁用(这也阻止了脚本)有关。参见link

但是,由于它适用于您拥有的文件,因此我猜您不处于“只读”或“注释”模式的文件。这样做并不会阻止您进行复制,但是在共享所有者时,可以选中一个复选框以禁用评论者和读者的打印,下载和复制选项。

因此,我认为您唯一的解决方案是要求所有者取消选中该框:/

答案 1 :(得分:0)

要执行以下操作,将文件复制到您的个人存储中:

  1. 在个人驱动器中创建文件夹的快捷方式。
  2. 创建一个新的Google Colaboratory笔记本。
  3. 使用以下代码安装驱动器:
from google.colab import drive

drive.mount("/content/drive")
  1. 接下来,输入命令:
!cp -rp '/content/drive/JAVA_ANDROID/*' '/content/drive/My Drive'

在哪里

JAVA_ANDROID是文件夹快捷方式的名称,输入您要复制的文件夹的名称,并附加/*以在该位置复制所有文件。

下一个是要保存复制文件的文件夹的路径,在这种情况下为/content/drive/My Drive

编辑:我注意到在某些情况下添加/*无效。因此,如果以上指定方法无效。只是不要在快捷方式名称后附加*并尝试。因此,在这种情况下,上面的命令将是:

!cp -rp '/content/drive/JAVA_ANDROID/' '/content/drive/My Drive'