Amazon S3 如何列出“文件夹”中的文件

Amazon S3 how to list files in a “folder”

我将 Amazon S3 中文件的密钥设置为 folder\filename。有没有办法获取 "folder" 下的所有文件(通过正则表达式搜索文件)?

你用 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/',那么它将在该文件夹中 return 个对象。

但是,不可能使用 Regex 表达式。您的程序需要过滤 return 列表以满足您的需要。

希望 link 能够回答您的问题。

您还可以使用 aws-cli 获取对象列表

在终端中输入以下命令

aws s3 ls bucketName/folderName/

此处文件夹名称末尾必须有'/',否则结果中只会得到文件夹名称。

如果您想获取 S3 存储桶中跨文件夹的子文件夹中的文件列表,我们可以使用 list_objects [=35] =].比如说,您需要存储桶 testabc 子文件夹中的所有文件具有以下文件:

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