如何从Google云端存储中获取特定的对象元数据信息?

问题描述

我要:

  1. 访问所有链接到我的Google帐户的GCP项目。
  2. 获取名称中包含单词foobar的所有存储桶。
  3. 从Google(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,TOTAL

我不想:

  1. 虽然我认为只有文件才有元数据,但如果子目录也有元数据,我不想获取子目录的元数据。
  2. 通过文件夹解析来覆盖它。一些存储桶具有大量的子目录。我想以最便宜的方式找到感兴趣的物体。

到目前为止我所拥有的:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...