![](/img/trans.png)
[英]how to copy files and folders from one S3 bucket to another S3 using python boto3
[英]Move all files in s3 bucket from s3 account to another using boto3
我正在尝试将存储桶的内容从账户-a 移动到账户-b 中的存储桶,我已经拥有他们两个的凭据。
这是我目前使用的代码:
import boto3
SRC_AWS_KEY = 'src-key'
SRC_AWS_SECRET = 'src-secret'
DST_AWS_KEY = 'dst-key'
DST_AWS_SECRET = 'dst-secret'
srcSession = boto3.session.Session(
aws_access_key_id=SRC_AWS_KEY,
aws_secret_access_key=SRC_AWS_SECRET
)
dstSession = boto3.session.Session(
aws_access_key_id=DST_AWS_KEY,
aws_secret_access_key=DST_AWS_SECRET
)
copySource = {
'Bucket': 'src-bucket',
'Key': 'test-bulk-src'
}
srcS3 = srcSession.resource('s3')
dstS3 = dstSession.resource('s3')
dstS3.meta.client.copy(CopySource=copySource, Bucket='dst-bucket', Key='test-bulk-dst', SourceClient=srcS3.meta.client)
print('success')
问题是,当我在Key
后跟/file.csv
字段中指定文件名时,它工作得很好,但是当我将其设置为复制整个文件夹时,如代码所示,它失败并抛出此异常:
botocore.exceptions.ClientError: 调用 HeadObject 操作时发生错误 (404):未找到
我需要做的是在一次调用中移动内容,而不是通过遍历 src 文件夹的内容,因为这是耗时/金钱的,因为我可能有数千个文件要移动。
Amazon S3 中没有 API 调用来复制文件夹。 (文件夹实际上并不存在——每个对象的 Key 包括其完整路径。)
您将需要遍历每个对象并复制它。
AWS CLI(用 Python 编写)提供了一些更高级别的命令,这些命令将为您执行此迭代:
aws s3 cp --recursive s3://source-bucket/folder/ s3://destination-bucket/folder/
如果存储桶位于不同的帐户中,我会建议:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.