我可以在Google云端硬盘中复制文件夹吗?


44

我需要每周一次在我的Google云端硬盘上复制整个文件夹。该文件夹中大约有25个文件。有什么简单的方法可以做到这一点?


我假设从Web界面开始。如果您正在使用客户端并将其同步到PC上的文件夹,这将是一种学术上的尝试。
ale

您是否只想将文件夹中的内容备份?还是您正在尝试将其添加到另一个Google帐户?您是否需要文件夹的全部内容,还是只需要指针?
威廉

我需要复制它,因为我想对它们具有不同的权限,为此,我需要具有单独的环境。但是,使用PC的google驱动器效果很好!
Dude2012

Answers:


19

如果您在PC上使用Google云端硬盘应用程序,则可以将该文件夹复制并粘贴到Google云端硬盘目录中,这样就会复制该文件夹。我不认为可以从Web应用程序执行此操作。


4
不幸的是,对于Linux用户而言,直到今天Google仍不支持“ Google Drive Application”。因此,他们需要使用一种称为“ grive ”的东西
iammilind 2014年

是将整个新文件夹重新上传到Web上,还是知道该文件夹的内容相同,并且在没有完全重新上传的情况下将其复制?
朱利安2014年

@Julian我认为它会重新加载整个内容。
ComputerLocus

我只是确认它确实会重新上传所有文件。笨蛋
朱利安

没有该应用程序的情况下,也可以右键单击-以zip格式下载文件夹,并在取消存档后
重新上传

10

已经编写了一个应用脚本来解决这个问题。您可以复制任何文件夹内容以及其中的结构。脚本将有助于消除对Google Drive桌面应用程序的需求。通过添加触发器,您甚至可以使过程自动化。

GDrive复制文件夹结构/内容脚本

在Google云端硬盘中复制文件夹结构

请注意 :

  • 这也_copy为所有子文件夹添加了后缀
  • folder_you_want_copied_copy是你的谷歌驱动器的最高父层次,因此,如果您复制您的驱动器的子文件夹,它会冒泡的最高水平时复制

超级酷的功能,即使在具有数百个子文件夹和数千个文件的超大型文件夹中也能完美工作(有些文件非常大)。谢谢Shunmugh!
kubusz

3
还会在所有子文件夹中添加后缀“ _copy”!
manas '02

5

如果您在Google云端硬盘的网络界面中...

  1. 创建一个新文件夹并命名为您想要的名称。

  2. 进入“现有”文件夹,选择所有文件,右键单击并单击“复制”。

  3. 选择所有副本,右键单击并单击移至。选择新文件夹。

请注意,如果要复制的文件夹包含子文件夹,则此方法将不起作用。


4
右键菜单上没有“复制”选项。有“制作副本”。您的意思是,制作所有文件的副本,然后突出显示副本并将其移动到新文件夹。
Blisterpeanuts

将所有文件移动到新文件夹后,还需要重命名所有文件,以删除“ Copy of”前缀。
汤姆(Tom)

这将导致所有文件的文件名带有“ Copy of”前缀。
伊莱贾·林恩

@Blisterpeanuts如果您要复制文件夹,即使它为空,也没有“进行复制”。令人讨厌的是,如果您要以空目录名模板作为开始
迈克尔,Michael

如果您在按住Ctrl的同时通过拖放操作移动了一组文件,则在鼠标指针附近会出现一个“ +”并且似乎可以正常工作,但是“复制”的文件只是硬链接,它们具有相同的ID,如果删除它们,则将删除该副本和原始文件都需要从最近的活动中恢复。抱歉,这是Google云端硬盘上的错误。
巴勃罗

3

OP的答复很晚,我认为在提出问题时甚至不可能,但这是我今天要做的:

  1. 选择我要复制的文件夹。
  2. 辅助单击它,然后从弹出菜单中选择“下载”
  3. 让我的浏览器将压缩的存档保存到一个临时目录中
  4. 从存档中提取文件夹,并给它起一个新的名字
  5. 返回云端硬碟;点击蓝色的大按钮,然后从下拉菜单中选择“文件夹上传”。
  6. 回到我的电脑;抓取新命名的文件夹,然后将其拖回到云端硬盘中。
  7. 冲厕所

注意: 当您有很多小文件和子文件夹一起构成较小的压缩文件时,这是一种解决方案。随着总压缩文件大小的增加,它的用处也随之降低。


1
该解决方案的主要问题-除了明显需要有足够的空间来在本地存储整个驱动器内容(两次(压缩和提取)两次)以外,还在于,如果它将所有Google文档导出为适当的MS OpenOffice文档格式,然后重新加载它们时,您必须将它们转换回Google格式,并处理由此引起的所有格式问题。
古斯

3

我宁愿放弃允许第三方访问我的云端硬盘的方式,除非我必须这样做,就像Lucky 711一样,我还是写了自己的脚本。我将其留在这里供将来的Google搜索结果冒险者使用。它将复制文件夹及其所有内容。对于我的用例,我编写了它来处理多个父母的文件,只需将复制的文件夹添加为新父母。如果您不希望这样做,请删除“计算不是该父母的父母”部分。

function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {

  var folderToCopy = DriveApp.getFolderById(folderToCopyId);
  var newParentFolder = DriveApp.getFolderById(newParentFolderId);

  // Create the copy of the folder
  var newFolder = newParentFolder.createFolder(newFolderName);

  // Copy all the files in that folder
  var files = folderToCopy.getFiles();
  while (files.hasNext()) {
    var file = files.next();

    // Count the parents that aren't this parent
    var countOfOtherParents = 0;
    var parents = file.getParents();
    while (parents.hasNext()) {
      var parent = parents.next();
      if (parent.getId() !== folderToCopyId) { countOfOtherParents++; }
    }

    // If it's unique, then copy it. Otherwise, just add it to the new parent.
    if (countOfOtherParents == 0) {
      file.makeCopy(file.getName(),newFolder);
    } else {
      newFolder.addFile(file);
    }

  }

  // Copy all the subfolders in that folder
  var folders = folderToCopy.getFolders();
  while (folders.hasNext()) {
    var folder = folders.next();
    copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
  }

}

作为参考,如果您要创建具有多个父级的文件的新副本,而不仅仅是将新文件夹添加为另一个父级,则较短的代码应如下所示:

function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {

  var folderToCopy = DriveApp.getFolderById(folderToCopyId);
  var newParentFolder = DriveApp.getFolderById(newParentFolderId);

  // Create the copy of the folder
  var newFolder = newParentFolder.createFolder(newFolderName);

  // Copy all the files in that folder
  var files = folderToCopy.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    file.makeCopy(file.getName(),newFolder);
  }

  // Copy all the subfolders in that folder
  var folders = folderToCopy.getFolders();
  while (folders.hasNext()) {
    var folder = folders.next();
    copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
  }

}

您如何运行此脚本?或者,如何获取输入参数?
roydukkey18年

输入的内容是您要复制的文件夹的ID,您要在其中创建副本的文件夹的ID以及您要复制的名称。要获取文件夹的ID,请导航至该文件夹并查看URL的末尾。1jVlkj------------------------Gk3D7除了所有的破折号都是字符外,大概有点像。该乱码是Google分配的唯一ID。一旦有了三个输入,就可以从另一个函数调用此函数,例如copyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
Engineer Toast

这几乎是完美的,但就我而言,我有链接到不同文件夹的文件。因此,它不是复制文件,而是复制链接。
roydukkey

如果您的意思是文件存在于多个位置(即具有多个父级),则在帖子中解决。您只能复制该countOfOtherParents++;行,然后这样做。对于我的用例,我明确希望这些文件只是获得另一个父项,而不是创建文件的新副本。如果您的意思是充当打开其他文件夹的超链接的文件,那么我不知道您可以这样做。
Engineer Toast

IE,最小的变化就是这个,但是“更干净的”代码就是这个
Engineer Toast

3

您可以为Google Spreadsheets 使用“ 复制文件夹 ”加载项:

  1. 创建一个Google电子表格
  2. 单击Add-ons > Get add-ons并添加“复制文件夹”附加组件。
  3. 选择您要复制的文件夹
  4. 做完了

请参阅视频教程

或者,可以使用此Chrome网络商店Google App Script来实现此结果。这不需要创建Google Spreadsheet。


7
这需要让插件“查看并阅读您的电子邮件”
Michael Cole

@MichaelCole,以及其他有问题的权限:管理电子表格,加载任意网站,更糟糕的是:离线访问。我建议在解决权限问题之前,不要安装此程序。
格斯

啊..它是勇敢的新剑桥后analytica的世界,我们生活在现在
abbood

管理电子表格是在运行时添加电子表格日志文件。
阿杰

@Ajay那是我的坏事。感谢您重新提交。
jonsca

1

我使用多台计算机,并且不想将驱动器应用程序都放在所有计算机上,因此我编写了以下脚本以在网站上进行复制。它很丑陋而且很基本,但是可以用。它仅复制文件夹及其文件,而不复制子文件夹。我确信还有改进的空间,请随时进行改进,但我希望至少从一开始就对您有所帮助。

根据下面的评论,这是一个Google Apps脚本。使用它的方法是打开Goog​​le脚本应用程序,然后将所有代码复制并粘贴到空白脚本中。之后,单击菜单上的发布选项,然后选择部署为Web应用程序。然后,您可以单击“最新代码”链接,或将URL复制并粘贴到浏览器中。然后,您将找到一个框,您可以在其中键入要复制的文件夹以及复制按钮。这将创建您命名的文件夹的副本,以及其中所有文件的副本。

注意:它不会复制子文件夹,只会复制文件。

function doGet()
{
  // Build UI
  // Create UI object
  var copyUI = UiApp.createApplication();
  // Create Input box referenced later by the name explicitly set below
  var userInput = copyUI.createTextBox().setName("textbox1");
  //create button
  var enterButton = copyUI.createButton("copy");
  // add all objects to UI object
  copyUI.add(userInput).add(enterButton);

  //Create clicke event handeler and add input field to handeler
  var clickHandler = copyUI.createServerHandler('onClick')
  .addCallbackElement(userInput);

  // add handelrer to the copy button
  enterButton.addClickHandler(clickHandler);

  // instantiate GUI
  return copyUI;
}


function onClick(e)
{
  // call currently active application/gui
  var app = UiApp.getActiveApplication();

  //Pass in the value of the e paramater named 'textbox1'
  var input = e.parameter.textbox1;

  // log value passed in from user input
  //Logger.log(input);

  // perform file copy
  CopyFile(input);
}


function CopyFile(filename)
{
  // declaire variables
  var newFolder_String;
  var newFolder;
  var originalFolder;
  var fileArray;
  var loopCount;
  var arrayLength;
  var newFile;
  // get original folder id
  originalFolder = DocsList.getFolder(filename);
  Logger.log(originalFolder.getId());


  // create new "copy" folder using: createFolder(<filename>_copy)
  newFolder_String = filename + "_Copy";
  Logger.log(newFolder_String);
  newFolder = DocsList.createFolder(newFolder_String);

  // get folders and files from original file using: 
    //   getFiles() from original file into an array
  fileArray = originalFolder.getFiles();

  // Copy files into folder:
  arrayLength = fileArray.length;
  loopCount = 0;

  // looping through array of file
  for (loopCount = 0; loopCount < arrayLength; loopCount++)
  {
    // create file copies using: file[i].makeCopy() and newFile.addToFolder(CopyFolder)
    newFile = fileArray[loopCount].makeCopy();
    Logger.log(newFile.getName());
    newFile.addToFolder(newFolder)
  }

}

-1

要复制文件夹,请按住CTRL按钮将其拖放到另一个文件夹上。


9
那不会重复;它只是创建一个指针。我通过将文件夹的Ctrl-drag-n-drop拖放到几个不同的位置来进行测试,然后在该文件夹中创建了一个文件,该文件在每个位置都可见。
ale

那就对了。他们称其为“添加文件夹”
th3an0maly

4
-1,不起作用。
Pacerier,2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.