当前位置: 首页 > 知识库问答 >
问题:

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

萧飞
2023-03-14

我试着用这篇文章来查找上次修改的文件,然后用AWS CLI从S3获取上次修改的对象

但这对于1000多个文件夹来说并不理想,而且根据文档,这应该是失败的。我需要搜索2000个文件夹对象。我想要的文件夹总是以D开头,后面跟着一组递增的数字。例:D1200

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

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

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

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

然后,我的输出将是D998,因为排序功能将对文件夹名称进行如下排序:

D119
D12
D13

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

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

共有1个答案

赫连瑾瑜
2023-03-14

我想知道你是否可以使用一个通用前缀列表来克服你的程序有很多文件夹?

试试这个命令:

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

(注意,is使用的是s3api,而不是s3

它应该提供一个“文件夹”列表。我不知道它是否对返回的“文件夹”数量有限制。

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

若要按数字部分排序,您可能会使用“版本排序”。请参阅:如何从Bash中对包含公共前缀和后缀的字符串进行数字排序?

 类似资料:
  • 问题内容: 我正在尝试编写脚本以从Python中FTP服务器的最新子目录获取最新文件。我的问题是我无法找出最新的子目录。有两个选项可用,子目录具有ctime可用。在目录名称中还提到了日期,即在哪个日期创建了目录。但是我不知道如何获取最新目录的名称。我想出了以下方法(希望服务器端按最新的ctime排序)。我已经按照以下方式进行了操作,如果第一个对象是最新目录,它将可以正常工作。 但是,有什么方法可以

  • 在Python中,我应该使用什么命令来获取包含我正在处理的文件的文件夹的名称? 这里就是我想要得到的。 我唯一想到的是使用两次: 还有更好的方法吗?

  • filename变量用于获取最新文件的名称。我的目标是监视文件夹,每当检索到新文件时,使用boto3自动将其上载到s3 bucket。 会话=BOT3。会话(aws\u access\u key\u id='aws\u access\u key\u id',aws\u secret\u access\u key='aws\u secret\u access\u key',region\u name

  • 问题内容: 在Python中,我应该使用哪个命令来获取包含正在使用的文件的文件夹的名称? 这就是我想要得到的。 我唯一想出的就是使用两次: 有什么更好的方法吗? 问题答案: 您可以使用: 返回路径名path的目录名。这是通过将路径传递给函数split()返回的对中的第一个元素。 给定完整路径,然后您可以正常拆分以获取路径的最后一部分。例如,通过使用: 返回路径名path的基本名称。这是通过将路径传

  • 我使用JavaMail和协议imap来组织电子邮件(gmail)。我创建了一个文件夹FOLDER1,代码如下: 我用代码移动消息: 它的工作原理 但我不明白。。。如果我想再次阅读邮件,但不想阅读已阅读的邮件,也不想阅读已创建文件夹中的邮件,则无法再次阅读。该名称已在收件箱中 有什么问题吗? 谢谢你的帮助

  • 问题内容: 我需要使用文件夹中文件的所有名称创建一个列表。 例如,如果我有: 我想将它们存储为 with 作为值。 用Java做到最好的方法是什么? PS:我在Mac OS X上 问题答案: 你可以这样做: 你只想获取JPEG文件还是所有文件?