gsutil / gcloud 按限制和分页存储列表文件

Posted

技术标签:

【中文标题】gsutil / gcloud 按限制和分页存储列表文件【英文标题】:gsutil / gcloud storage list files by limits and pagination 【发布时间】:2021-06-08 22:13:20 【问题描述】:

有什么方法可以列出 GCS 存储桶中的文件有限制。

假设我的存储桶中有 2k 个对象。但是当我执行 gsutil ls 时,我只想要前 5 个对象,而不是全部。 如何做到这一点。

还有分页功能吗? gsutil ls gs://my-bucket/test_file_03102021* 2>/dev/null | grep -i ".txt$" || :

【问题讨论】:

【参考方案1】:

通过查看gsutil help lsgsutil 目前没有选项来限制从ls 调用返回的项目数。

虽然您可以将结果通过管道传递到 awk 之类的东西以仅获取前 5 个项目,但如果您的存储桶中有很多对象,那将是非常浪费的(因为 gsutil 将继续进行分页 HTTP 调用,直到它列出了所有 N 个对象)。

如果您需要在包含大量对象的存储桶上定期执行此操作,您最好编写一个使用 GCS 客户端库之一的简短脚本。例如,查看google-cloud-storage Python library -- 具体来说,请参见the list_blobs 方法,该方法接受max_results 参数。

【讨论】:

【参考方案2】:

当您直接使用 API 时,可以使用分页。如果您只想要前 5 个对象并使用 gsutil,则必须等待数百(数千、数百万......)个文件的完整答案才能获得前 5 个。

如果您使用 API,您可以这样做

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ 
  "https://storage.googleapis.com/storage/v1/b/<BUCKET_NAME>/o?alt=json&&maxResults=5" \ 
  | jq .items[].name

当然,您可以更改最大结果大小

您也可以在过滤时包含前缀。更多详情见API documentation

【讨论】:

以上是关于gsutil / gcloud 按限制和分页存储列表文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 GSUTIL 将文件从 Windows 10 文件夹上传到 Gcloud 存储桶时出现问题

gcloud auth login 和 python 上传

在 python 脚本中运行 gcloud auth 和 gsutil 命令

如何让 gsutil 在 docker 容器中使用 gcloud 凭据

Xcode 更新破坏了 gcloud 和 gsutil

反应表动态页面大小,但有大小限制和分页