繁体   English   中英

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

[英]How to grab specific object metadata info from Google Cloud Storage?

我想要:

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

我不想:

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

到目前为止我所拥有的:

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

所以我的问题:

  1. 我该如何修改: gsutil ls -L -p "${project}" gs://*foobar* >> non_recursive.csv仅收集一些元数据字段并以上述数据帧格式输出?
  2. 有没有更好的方法来做到以上几点? (请仅使用 Python 或 Bash 解决方案)

您可以生成要为其获取元数据的文件列表,然后为每个文件生成一个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

这将获取文件名和 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)

可以获得其他元数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM