AWS s3api列表对象返回多少个对象?

Rus*_*kov 7 linux amazon-s3 amazon-web-services

我在用:

aws s3api list-objects --endpoint-url https://my.end.point/ --bucket my.bucket.name --query 'Contents[].Key' --output text
Run Code Online (Sandbox Code Playgroud)

获取存储桶中的文件列表。

aws s3api list-object 文档页面说,该命令只返回多达1000个对象,但我注意到,在我的情况下,它会返回在我的桶中的所有文件的名称。例如,当我运行以下命令时:

aws s3api list-objects --endpoint-url https://my.end.point/ --bucket my.bucket.name --query 'Contents[].Key' --output text | tr "\t" "\n" | wc -l
Run Code Online (Sandbox Code Playgroud)

我显示了13512,这意味着返回了超过一万三千个文件名。

我错过了吗?

我使用以下aws cli版本:

aws-cli/1.10.57 Python/2.7.3 Linux/3.2.0-4-amd64 botocore/1.4.47
Run Code Online (Sandbox Code Playgroud)

Mar*_*per 7

返回存储桶中的部分或全部(最多 1000 个)对象。您可以使用请求参数作为选择标准来返回存储桶中对象的子集。[1]

我认为文档描述中的“(up to 1000)”部分具有高度误导性。它指的是 cli 发送的每个底层 HTTP 请求的最大页面大小。该--page-size选项的文档清楚地说明了这一点:

要在 AWS 服务调用中获取的每个页面的大小。这不会影响命令输出中返回的项目数。设置较小的页面大小会导致对 AWS 服务的更多调用,从而在每次调用中检索更少的项目。这有助于防止 AWS 服务调用超时。

在阅读有关分页的 AWS 文档 [2] 时,它会变得更加清晰,其中描述了:

对于可以返回大量项目的命令,AWS 命令​​行界面 (AWS CLI) 添加了三个选项,当 AWS CLI 调用服务的 API 来填充列表时,您可以使用这些选项控制输出中包含的项目数量。

默认情况下,AWS CLI 使用 1000 的页面大小并检索所有可用项目。例如,如果您在包含 3,500 个对象的 Amazon S3 存储桶上运行 aws s3api list-objects,CLI 会向 Amazon S3 发出四次调用,在后台为您处理特定于服务的分页逻辑,并在最后返回所有 3,500 个对象输出。

正如 Ankit 已经正确说明的那样,使用该--max-items选项是限制结果并停止自动分页的正确解决方案:

要在 AWS CLI 输出中一次包含更少的项目,请使用 --max-items 选项。AWS CLI 仍按上述方式处理服务的分页,但每次仅打印出您指定的项目数。[2]

参考

[1] https://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
[2] https://docs.aws.amazon.com/cli/latest/userguide/cli -usage-pagination.html


Ank*_*nde 2

尝试使用--max-items命令。

文档NextMarker提到当项目数量超过时它将返回max-itemsstarting-token您可以在下次调用中将其传递以实现分页。