如何从 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 中获取特定对象元数据信息?的主要内容,如果未能解决你的问题,请参考以下文章