aws s3api list-objects返回了多少个对象?

时间:2016-08-20 12:25:11

标签: linux amazon-web-services amazon-s3

我正在使用:

aws s3api list-objects --endpoint-url https://my.end.point/ --bucket my.bucket.name --query 'Contents[].Key' --output text

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

aws s3api list-object documentation page表示此命令最多只返回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

我显示13512,这意味着返回了超过13000个文件名。

我错过了什么?

我使用以下aws cli版本:

aws-cli/1.10.57 Python/2.7.3 Linux/3.2.0-4-amd64 botocore/1.4.47

2 个答案:

答案 0 :(得分:2)

  

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

我认为文档说明中的“(最多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列表对象,则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

答案 1 :(得分:1)

尝试在命令中使用--max-items

doc提到当项目数大于NextMarker时,它将返回max-items。您可以在下一个调用中将其作为starting-token传递以实现分页。