如何仅将文件从目录下的许多子目录复制到GCP中的另一个项目存储桶?

时间:2018-07-19 10:23:24

标签: google-cloud-platform google-cloud-storage

我的Google Cloud存储桶中有大量数据。我必须将所有文件复制到另一个项目存储桶中。但是主要的问题是,在此存储桶中,我创建了一些文件夹,并且该文件夹下有许多子文件夹,所有子文件夹都有数据。因此,当我使用普通的gsutil copy命令时,它将复制所有数据以及文件夹。 我需要帮助来解决此问题。因为从一个项目复制到另一个项目存储区需要太多时间。

5 个答案:

答案 0 :(得分:0)

  

您可以使用Google Data Transfer Service

这是log子类别中的第二个选项。

答案 1 :(得分:0)

使用不带-r选项的gsutil cp命令。

  

-R和-r选项是同义词。导致目录,                    存储桶和存储桶子目录以递归方式复制。                    如果您忽略使用此选项进行上传,则gsutil将                    复制找到的所有文件并跳过任何目录。同样,                    忽略为下载指定此选项将导致                    gsutil复制当前存储区目录中的所有对象                    级别,并跳过所有子目录。

答案 2 :(得分:0)

如果我很好理解,您想将所有文件从一个存储桶复制到另一个存储桶,但是您不想具有相同的层次结构,而是希望所有文件都位于根路径中。

如今,无法使用gsutil进行此操作,但是您可以使用脚本来完成此操作,这里有我的解决方案:

* * * * * script/to/execute 2>&1

答案 3 :(得分:0)

Akash Dathan所述,您可以使用 Cloud Storage Transfer Service 移动存储桶内容。我建议您看一下这份Moving and Renaming Buckets指南,在其中可以找到执行此任务所需的步骤。

请记住以下要求:

  • 转移服务服务帐户必须具有读取权限 您的来源并写入目的地。
  • 如果要删除源文件,则传输服务的服务帐户将需要删除对源文件的访问权限。
  • 如果您的服务帐户没有这些 权限,存储桶所有者必须授予它们。

注意。如果您对源存储桶和目标存储桶具有 'storage.buckets.setIamPolicy' 权限,则创建传输作业将被授予该服务帐户需要完成传输所需的源和目标权限。

答案 4 :(得分:0)

您可以使用此命令将所有文件放在根路径中。

gsutil cp 'gs://[YOUR_FIRST_BUCKET_NAME]/*' gs://[YOUR_SECOND_BUCKET_NAME]

如果您的存储桶中有嵌套目录,请使用以下命令:

gsutil cp -r 'gs://[YOUR_FIRST_BUCKET_NAME]/*' gs://[YOUR_SECOND_BUCKET_NAME]

请注意第一个命令周围的单引号。 如果您需要更多高级功能,可以看看Wildcard Names

相关问题