【问题标题】:gsutil / gcloud storage list files by limits and paginationgsutil / gcloud 按限制和分页存储列表文件
【发布时间】: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$" || :
【问题讨论】:
标签:
google-cloud-platform
google-cloud-storage
gsutil
【解决方案1】:
通过查看gsutil help ls,gsutil 目前没有选项来限制从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