GCP 存储 - 如何创建一个脚本,将所有文件/文件夹从一个存储桶复制到另一个存储桶,但文件夹结构不同
Posted
技术标签:
【中文标题】GCP 存储 - 如何创建一个脚本,将所有文件/文件夹从一个存储桶复制到另一个存储桶,但文件夹结构不同【英文标题】:GCP Storage - How to create a script that copies all files/folders from one bucket to another, but in a different folder structure 【发布时间】:2021-10-20 23:55:07 【问题描述】:GCP 上有一个存储桶,其中的文件夹命名如下。
Tests_111/tests.pdf
Tests_112/tests.pdf
AllTests_111/alltests.pdf
...
需要将这些文件夹复制到以下结构的另一个存储桶中。
Tests/111/tests.pdf
Tests/112/tests.pdf
AllTests/111/alltests.pdf
我基本上只是想检查文件夹名称,看看它是否可以被'_
'拼接,这将给我“Tests
”和“111
”。之后,在其中创建一个名为“Tests”的文件夹和一个名为“111
”的子文件夹。
我是 GCP 和 gsutils 的新手。有什么方法可以实现吗?
【问题讨论】:
Google 云存储没有文件夹/目录。命名空间是扁平的。在您的情况下,您将在用“/”字符替换第一个“_”字符时进行对象复制。几乎任何脚本语言都可以进行这种简单的字符替换。 您在寻找为您编写代码/脚本的人吗?我们帮助您解决您编写的代码的问题。 MBHA Phoenix 提供了一个很好的答案来帮助您入门。 【参考方案1】:这里是代码 sn-p 的示例,用于将对象从一个存储桶复制到另一个存储桶
from google.cloud import storage
def copy_blob(
bucket_name, blob_name, destination_bucket_name, destination_blob_name
):
"""Copies a blob from one bucket to another with a new name."""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"
# destination_bucket_name = "destination-bucket-name"
# destination_blob_name = "destination-object-name"
storage_client = storage.Client()
source_bucket = storage_client.bucket(bucket_name)
source_blob = source_bucket.blob(blob_name)
destination_bucket = storage_client.bucket(destination_bucket_name)
blob_copy = source_bucket.copy_blob(
source_blob, destination_bucket, destination_blob_name
)
print(
"Blob in bucket copied to blob in bucket .".format(
source_blob.name,
source_bucket.name,
blob_copy.name,
destination_bucket.name,
)
)
参考:https://cloud.google.com/storage/docs/copying-renaming-moving-objects#storage-copy-object-python
因此,您只需编写逻辑代码即可正确设置来自blob_name
的destination_blob_name
。顺便说一下,blob 名称是完全限定的,意味着它包括文件夹名称和文件名,如Tests/111/tests.pdf
【讨论】:
以上是关于GCP 存储 - 如何创建一个脚本,将所有文件/文件夹从一个存储桶复制到另一个存储桶,但文件夹结构不同的主要内容,如果未能解决你的问题,请参考以下文章