如何从 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 time
和 Content-Type
和 TOTAL
。
将结果保存为 .csv / 数据框格式,字段如下:foobar, Creation time, Content-Type, TOTAL
我不想:
-
虽然我认为只有文件有元数据,但万一子目录也有元数据,我不想抓取子目录的元数据。
过度解析文件夹。一些存储桶有大量的子目录。我希望以最便宜的方式到达感兴趣的对象。
到目前为止我所拥有的:
-
我使用
gcloud projects list
将所有项目链接到我的帐户。
我手动创建了一个包含以下字段的 .csv 文件:project_id, recursive, selected
。 recursive
TRUE
是为那些我知道他们没有那么多文件夹的人准备的,所以我有能力浏览所有子目录。 selected
TRUE
只是帮助我完成一些项目,而不是全部。
对于selected
字段为TRUE
的所有项目,我收集数据并使用以下命令将其保存在文件中:
gsutil ls -L -p "$project" gs://*foobar* >> non_recursive.csv
对于selected
和recursive
字段为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 中获取特定对象元数据信息?的主要内容,如果未能解决你的问题,请参考以下文章