亚马逊S3如何列出“文件夹”中的文件

5
我将Amazon S3中文件的键设置为folder\filename。是否有一种方法可以获取“文件夹”下的所有文件(通过正则表达式搜索文件)?
3个回答

9

你在问题中标记了aws-sdk,但没有提及语言,因此我将在本答案中使用Python。

list_objects_v2()命令接受一个Prefix

response = client.list_objects_v2(
    Bucket='string',
    Delimiter='string',
    EncodingType='url',
    MaxKeys=123,
    Prefix='string',
    ContinuationToken='string',
    FetchOwner=True|False,
    StartAfter='string',
    RequestPayer='requester'
)

如果您设置Prefix='folder/',它将返回该文件夹中的对象。
但是,无法使用正则表达式。您的程序需要过滤返回列表以满足您的需求。

谢谢您的回复。但是这对我并没有解决问题,因为它仍然显示子文件夹中的文件。有没有办法调整您的响应来解决这个问题? - Gunith D
@GunithD 请新创建一个问题,而不要在旧问题的评论中提问。 - John Rotenstein

2
我希望提供的链接能回答你的问题。

AWS S3 对象列表

你也可以使用 aws-cli 获取对象列表。

在终端中输入以下命令:

aws s3 ls bucketName/folderName/

这里 '/' 在文件夹名字末尾是必须的,否则你只会得到文件夹名字作为结果。


1
如果您想获取位于 S3 存储桶中不同文件夹下的子文件夹中的文件列表,可以使用 list_objects API。例如,您需要获取存储桶 test 中 abc 子文件夹中的所有文件,这些文件如下所示:
folderA/abc/fileabcX
folderA/def/filedefX
folderB/abc/fileabcY
folderB/def/filedefY
folderC/abc/fileabcZ
folderC/def/filedefZ
folderC/xyz/filexyzZ

在Python中,我们可以通过两次调用list_objects_v2 API 来完成此操作,第一次使用空前缀和 / 分隔符获取文件夹,并在输出中使用“CommonPrefixes”。然后,再次调用list_objects_v2并将子文件夹作为前缀的一部分与您在第一次调用中获取的文件夹名称一起使用。
import boto3
client = boto3.client('s3')
objs = client.list_objects_v2(Bucket="test", Prefix='', Delimiter='/')
for prefix in objs.get('CommonPrefixes')
    folder = prefix.get('Prefix')
    resp = client.list_objects_v2(
        Bucket="test",
        Prefix=folder + 'abc/',
    )
    if resp.get('Contents') is not None:
        for obj in resp.get('Contents'):
            print(obj.get('Key'))

输出:

fileabcX
fileabcY
fileabcZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接