使用 AWS CLI 获取最新的 AWS S3 文件夹对象名称

Grab latest AWS S3 Folder Object name with AWS CLI

我尝试使用此 post 查找最后修改的文件,然后 awk 查找它包含的文件夹:

但这对于超过 1000 个文件夹来说并不理想,documentation 应该会失败。我有 2000 多个文件夹对象需要搜索。我想要的文件夹将始终以 D 开头,然后是一组递增的数字。例如:D1200

答案的结果让我创建了这个有效的调用:

aws s3 ls main.test.staging/General_Testing/Results/ --recursive | sort | tail -n 1 | awk '{print }'

但是搜索数千个文件需要 40 多秒,然后我需要正则表达式解析输出以找到文件夹对象而不是其中修改的最后一个文件。另外,如果我尝试这样做以找到我想要的文件夹(这是 Results 对象之后的对象):

aws ls s3 main.test.staging/General_Testing/Results/ | sort | tail -1

那么我的输出将是 D998 因为排序函数将文件夹名称排序如下:

D119
D12
D13

因为技术上 D12 大于 D119 因为它在第二个位置有一个 2。按照这种奇怪的逻辑,我无法使用该调用可靠地检索编号最高的文件夹,因此也无法检索最后创建的文件夹。需要注意的是,包含文件的文件夹对象没有可用于查询的 Last Modified 标记。

要清楚我的问题:我可以使用什么调用来查看大量 S3 对象以找到编号最大的文件夹对象?最好答案是快速的,可以处理 1000 多个对象,并且不需要正则表达式分解。

不知能否用CommonPrefixes的列表来克服你的文件夹多的问题?

试试这个命令:

aws s3api list-objects-v2 --bucket main.test.staging --delimiter '/' --prefix 'General_Testing/Results/' --query CommonPrefixes --output text

(注意是使用 s3api 而不是 s3。)

它应该提供 'folders' 的列表。不知道有没有返回'folders'个数的限制

至于排序D119D2之前,这是因为是排序字符串。排序字符串时输出完全正确。

要按数字部分排序,您可以使用“版本排序”。参见:How to sort strings that contain a common prefix and suffix numerically from Bash?