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] =].比如说,您需要存储桶 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
我将 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] =].比如说,您需要存储桶 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