如何从 Google Cloud Storage 中获取特定对象元数据信息?

Posted

技术标签:

【中文标题】如何从 Google Cloud Storage 中获取特定对象元数据信息?【英文标题】:How to grab specific object metadata info from Google Cloud Storage? 【发布时间】:2021-01-05 15:32:24 【问题描述】:

我想:

    访问与我的 Google 帐户关联的所有 GCP 项目。 获取名称中包含单词foobar 的所有存储桶。 从 Google (Creation time, Update time, Storage class, Content-Length, Content-Type, Hash (crc32c), Hash, ETag, Generation, Metageneration, ACL, TOTAL) 提供的元数据中检索一些元数据,例如 Creation timeContent-TypeTOTAL。 将结果保存为 .csv / 数据框格式,字段如下:foobar, Creation time, Content-Type, TOTAL

我不想:

    虽然我认为只有文件有元数据,但万一子目录也有元数据,我不想抓取子目录的元数据。 过度解析文件夹。一些存储桶有大量的子目录。我希望以最便宜的方式到达感兴趣的对象。

到目前为止我所拥有的:

    我使用gcloud projects list 将所有项目链接到我的帐户。 我手动创建了一个包含以下字段的 .csv 文件:project_id, recursive, selectedrecursive TRUE 是为那些我知道他们没有那么多文件夹的人准备的,所以我有能力浏览所有子目录。 selected TRUE 只是帮助我完成一些项目,而不是全部。 对于selected 字段为TRUE 的所有项目,我收集数据并使用以下命令将其保存在文件中: gsutil ls -L -p "$project" gs://*foobar* >> non_recursive.csv 对于selectedrecursive 字段为TRUE 的所有项目,我收集数据并使用以下命令将其保存在文件中: gsutil ls -r -L -p "$project" gs://*secret* >> recursive.csv

所以我的问题:

    如何修改:gsutil ls -L -p "$project" gs://*foobar* >> non_recursive.csv 只收集部分元数据字段并以上述数据帧格式输出? 是否有更好的方法来完成上述操作? (请仅使用 Python 或 Bash 解决方案)

【问题讨论】:

【参考方案1】:

您可以生成要获取元数据的文件列表,然后为每个文件生成gsutil ls 命令,例如,

sed 's/\(.*\)/gsutil ls -L \1/' objects_to_list  | sh

如果有大量此类对象,您可以并行列出,例如,

sed 's/\(.*\)/gsutil ls -L \1/' objects_to_list  | split -l 100 - LISTING_PART
for f in LISTING_PART*; do
  sh $f > $f.out &
done
wait

【讨论】:

你的答案是否涵盖第一个问题?【参考方案2】:

这会获取文件名和 mimeType:

blobs = storage_client.list_blobs(BUCKET)
for blob in blobs:
    item = 'content': "gs:///".format(blob.bucket.name,blob.name), 'mimeType': "".format(blob.content_type)
    print(item)

可以获取其他metatdata。

【讨论】:

以上是关于如何从 Google Cloud Storage 中获取特定对象元数据信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Google Cloud Storage Bucket 从项目复制到项目?

如何将数据直接从一个 Google Cloud Storage 项目移动到另一个?

如何设置表的架构以在 Google App Scripts 中自动检测从 Google Cloud Storage 获取数据?

如何从 Node 中的图像 url 将图像上传到 Google Cloud Storage?

如何将文件从加密的 S3 存储桶复制到 Google Cloud Storage?

Data Studio Community Connector - 如何从 Google Cloud Storage 中的 CSV 文件中获取数据?