【发布时间】:2019-05-26 11:45:08
【问题描述】:
我将 Amazon S3 中文件的键设置为文件夹\文件名。有没有办法获取“文件夹”下的所有文件(通过正则表达式搜索文件)?
【问题讨论】:
标签: amazon-web-services amazon-s3 file-upload aws-sdk
我将 Amazon S3 中文件的键设置为文件夹\文件名。有没有办法获取“文件夹”下的所有文件(通过正则表达式搜索文件)?
【问题讨论】:
标签: amazon-web-services amazon-s3 file-upload aws-sdk
您使用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/',那么它将返回该文件夹中的对象。
但是,不可能使用正则表达式。您的计划将需要过滤退货列表以满足您的需求。
【讨论】:
希望提供的链接能回答您的问题。
您还可以使用 aws-cli 获取对象列表
在终端输入以下命令
aws s3 ls bucketName/folderName/
这里需要在文件夹名称的末尾加上“/”,否则结果中只会得到文件夹名称。
【讨论】:
如果您想获取在 S3 存储桶中的文件夹中存在的 SUBFOLDER 中的文件列表,我们可以使用 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 两次来做到这一点,您可以在其中 第一次获取文件夹,使用空前缀和 / 分隔符并在输出。然后,再次调用 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
【讨论】: