Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS CLI S3API在路径中查找最新文件夹_Amazon Web Services_Amazon S3_Aws Cli - Fatal编程技术网

Amazon web services AWS CLI S3API在路径中查找最新文件夹

Amazon web services AWS CLI S3API在路径中查找最新文件夹,amazon-web-services,amazon-s3,aws-cli,Amazon Web Services,Amazon S3,Aws Cli,我有一个非常大的桶(数十万个物体)。我有一个路径(比如s3://myBucket/path1/path2)/path2获取也属于文件夹的上载。因此,样本可能如下所示: s3://myBucket/path1/path2/v6.1.0 s3://myBucket/path1/path2/v6.1.1 s3://myBucket/path1/path2/v6.1.102 s3://myBucket/path1/path2/v6.1.2 s3://myBucket/path1/path2/v6.1.2

我有一个非常大的桶(数十万个物体)。我有一个路径(比如s3://myBucket/path1/path2)/path2获取也属于文件夹的上载。因此,样本可能如下所示:

s3://myBucket/path1/path2/v6.1.0
s3://myBucket/path1/path2/v6.1.1
s3://myBucket/path1/path2/v6.1.102
s3://myBucket/path1/path2/v6.1.2
s3://myBucket/path1/path2/v6.1.25
s3://myBucket/path1/path2/v6.1.99
S3不考虑版本号排序(这很有意义),但按字母顺序,列表中最后一个不是最后一个上传的。在该示例中,…/v6.1.102是最新的

以下是到目前为止我得到的信息:

aws s3api list-objects 
--bucket myBucket
--query "sort_by(Contents[?contains(Key, \`path1/path2\`)],&LastModified)"´ 
--max-items 20000
所以这里的一个问题是max items似乎是从bucket中所有文件的字母顺序递归开始的。20000个文件确实可以访问我的文件,但浏览这么多文件的过程相当缓慢

所以我的问题有两个:

1-这仍在搜索整个存储桶,但我只想将其缩小到path2/。我能做这个吗

2-这只列出对象,是否可以只列出路径列表

基本上,最终目标是我只需要一个命令来返回上面示例中最新的文件夹名称,如“v6.1.102”。

要回答#1,您可以添加
--前缀path1/path2
,以限制您在bucket中查询的内容

就按上次修改的排序而言,我只能考虑使用SDK结合and(boto3)对对象进行上次修改并以编程方式进行排序

更新

或者,您可以在中按
LastModified
反向排序,并返回第一项,以提供最新的对象并从中收集目录

aws s3api list-objects-v2 \
--bucket myBucket \
--prefix path1/path2 \
--query 'reverse(sort_by(Contents,&LastModified))[0]'

如果您希望通用查询,例如“最低版本”、“最高版本”、“所有V6. X版本”,则考虑用版本号维护单独的数据库。


如果您只需要知道最高版本号,并且需要快速检索(比列表对象调用更快),那么您可以独立维护该版本号。例如,您可以使用一个Lambda函数来响应上载到path1/path2的对象,其中Lambda函数负责将它看到的最高版本号存储到文件s3://mybucket/version.max中。

Prefix使用boto3客户机与list_对象一起工作。但是使用boto3资源可能会带来一些问题。分页中的分页器是一个很好的概念,效果很好!。要查找最新的更改(添加的对象):按(内容)[-1]排序
使用头对象
谢谢!前缀确实可以缩小范围,我得到了reverse:Unknown function:reverse的语法错误,但我可能可以从这里找到它。也许你的
awscli
已经过时了?我是用1.11.183版本做的<代码>pip安装-U awscli
哦,就在这里。谢谢