首页 > 解决方案 > 如何使用python按一定大小过滤和列出s3文件夹中的所有对象

问题描述

我正在尝试在 s3 存储桶的文件夹中获取所有指定大小的文件。如何遍历存储桶并按指定大小过滤文件?我还想返回大小正确的文件名。

s3 = boto3.client('s3')
s3.list_objects_v2(Bucket = 'my-images')

样本输出是

 u'Key': u'detail/01018535.jpg',
   u'LastModified': datetime.datetime(2019, 1, 23, 0, 48, 41, tzinfo=tzlocal()),
   u'Size': 13535,
   u'StorageClass': 'STANDARD'},
  {u'ETag': '"cd65991a1c6f118e8b036208a30028a7"',
   u'Key': u'detail/0119AF2.jpg',
   u'LastModified': datetime.datetime(2019, 1, 10, 17, 17, tzinfo=tzlocal()),
   u'Size': 12984,
   u'StorageClass': 'STANDARD'}

例如,假设我想要搜索 12984 的大小。然后它将返回“密钥”

标签: pythonamazon-web-servicesamazon-s3amazon-sagemaker

解决方案


您可以使用--query表达式:

aws s3api list-objects-v2 --bucket my-images --query 'Contents[?Size==`12984`].[Key]' --output text

我放在[Key]方括号中以强制每一个出现在单独的行上。

此语法适用于 Mac 命令行。Windows 可能需要不同的引号。

有关使用此类表达式的提示,请参阅:JMESPath 教程


推荐阅读