是否将大量Google Drive文件传输到另一个Drive帐户?

问题描述 投票:0回答:1

如何将一个大文件夹的视频文件(约400 GB的篮球比赛影片)从一个帐户转移到另一个帐户?我不能只使用“更改所有权”工具,因为它是从帐户A(我的学校帐户)到帐户B(我的个人帐户)的。我可以使用Google导出工具,但是我认为我可以在不使用中间平台的情况下从一个Google云端硬盘转移到另一个帐户,而无需在中间使用另一个平台,并且需要完整下载内容并重新上传,这是不实际的许多大文件。

((在担心之前,所有这些数据都是I创建的数据,并负责;不是受版权保护/盗版的镜头。)

google-drive-api
1个回答
0
投票

我相信您的情况和目标如下。

  • 您有权复制源Google云端硬盘中的所有文件。
  • 文件被放入包含嵌套文件夹的特定文件夹中。
  • 您的Google云端硬盘(目标文件夹一侧)具有足够的存储空间来复制所有文件。
  • 您希望使用脚本复制所有文件。

为此,这个答案怎么样?我认为使用Google Apps脚本可以实现您的目标。该示例脚本的流程如下。

  1. 从特定的源文件夹中检索所有文件ID,包括嵌套文件夹。
  2. 根据检索到的文件ID创建批处理请求。
  3. 使用带有批处理请求的Drive API的files.copy方法将文件复制到Google云端硬盘中的特定文件夹。

用法:

请执行以下流程。

1。创建Google Apps脚本的新项目。

Web Apps的示例脚本是Google Apps脚本。因此,请创建一个Google Apps脚本项目。

如果要直接创建它,请访问https://script.new/。在这种情况下,如果您未登录Google,则会打开“登录”屏幕。因此,请登录到Google。这样,将打开Goog​​le Apps脚本的脚本编辑器。

2。安装Google Apps脚本库。

在此答案中,使用了Google Apps脚本库。是BatchRequest。通过使用此库,可以使用异步过程完成文件复制。这样,与同步处理相比,可以降低处理成本。

关于安装库的方法,请检查here

3。启用云端硬盘API。

Please enable Drive API at Advanced Google services.这样,将在API控制台上自动启用Drive API。在此示例脚本中,使用了Drive API v3。

4。示例脚本。

请复制并粘贴以下脚本。并将源文件夹ID设置为sourceFolderId。您的情况是They are in several folders, nested inside of one main folder.的顶层文件夹ID。另外,请将目标文件夹ID设置为destinationFolderId。在这种情况下,请在您的Google云端硬盘中设置文件夹ID。

function myFunction() {
  const sourceFolderId = "###";  // Please set the source folder ID.
  const destinationFolderId = "###";  // Please set the destination folder ID.


  const getFiles = (id, res = []) => {
    const folder = DriveApp.getFolderById(id);
    const files = folder.getFiles();
    while (files.hasNext()) {
      const file = files.next();
      res.push({name: file.getName(), id: file.getId()})
    }
    let ids = [];
    const folders = folder.getFolders();
    while (folders.hasNext()) ids.push(folders.next().getId());
    if (ids.length > 0) ids.forEach(id => getFiles(id, res));
    return res;
  }
  const files = getFiles(sourceFolderId);
  const limit = 100;
  const split = Math.ceil(files.length / limit);
  for (let i = 0; i < split; i++) {
    const batches = files.splice(0, limit).map(f => ({
      method: "POST",
      endpoint: `https://www.googleapis.com/drive/v3/files/${f.id}/copy?supportsAllDrives=true`,
      requestBody: {name: f.name, parents: [destinationFolderId]},
    }));
    const requests = {batchPath: "batch/drive/v3", requests: batches};
    const result = BatchRequest.Do(requests);
    console.log(result.getContentText());
  }

  // DriveApp.createFile()  // This comment line is used for automatically detecting the scope of `https://www.googleapis.com/auth/drive` with the script editor. So please don't remove this line.
}
  • 在脚本编辑器上运行此功能时,将打开授权屏幕。因此,请授权范围。这样,脚本将运行。

注意:

  • 在这种情况下,所有文件都将复制到destinationFolderId的特定文件夹。
  • 请在启用V8的同时使用此脚本。
  • 如果您是源帐户的所有者,我认为如果可以将顶部文件夹的父文件夹直接更改为您的帐户(即目标文件夹),则处理成本将是最低的。但是在我的环境中,我无法对其进行测试。因此,如果以此删除数据,这将是一个大问题。因此,我提出了复制所有文件的方法。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.