我找不到使用python中的boto在s3存储桶中将内容从一个内容复制到另一个内容的任何解决方案。
假设存储桶B1包含以下键结构:B1 / x / *我想将所有对象从键(例如B / x / *)递归复制到B / y / *
S3中没有“目录”。那些“ /”分隔符只是对象名称的一部分,这就是为什么boto没有这样的功能。编写脚本来处理它或使用第三方工具。
AWS customerapps显示了提供此类任意目录复制功能的s3browser。典型的免费版本仅产生两个线程来移动文件,付费版本则允许您指定更多线程并运行得更快。
或者,您只需编写脚本并使用s3.client.copy_object将文件复制到另一个名称,然后再将其删除。例如
import boto3
s3 = boto3.client("s3")
# list_objects_v2() give more info
more_objects=True
found_token = True
while more_objects :
if found_token :
response= s3.list_objects_v2(
Bucket="mybucket",
Prefix="B1/x/",
Delimiter="/")
else:
response= s3.list_objects_v2(
Bucket="mybucket",
ContinuationToken=found_token,
Prefix="B1/x/",
Delimiter="/")
# use copy_object or copy_from
for source in object_list["Contents"]:
raw_name = source["Key"].split("/")[-1]
new_name = "new_structure/{}".format(raw_name)
s3.copy_object(
....
)
# Now check there is more objects to list
if "NextContinuationToken" in response:
found_token = response["NextContinuationToken"]
more_objects = True
else:
more_objects = False
**重要说明**:list_object每个清单最多仅返回1000个键,MaxKey不会更改限制。因此,您必须使用list_objects_v2并检查是否返回了NextContinuationToken,以确保存在更多对象,请重复执行直到用尽为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句