我们可以使用 boto3 Python 在 aws s3 存储桶之间递归复制文件和文件夹吗?

     2023-03-22     211

关键词:

【中文标题】我们可以使用 boto3 Python 在 aws s3 存储桶之间递归复制文件和文件夹吗?【英文标题】:Can we copy the files and folders recursively between aws s3 buckets using boto3 Python? 【发布时间】:2017-09-13 10:56:53 【问题描述】:

是否可以使用boto3将一个源存储桶中的所有文件复制到另一个目标存储桶。并且源存储桶没有常规的文件夹结构。

Source bucket: SRC
Source Path: A/B/C/D/E/F..
where in D folder it has some files,
E folder has some files

Target bucket: TGT
Target path: L/M/N/

我需要使用boto3将SRC存储桶上方的所有文件和文件夹从文件夹C复制到N文件夹下的TGT存储桶。

任何人都可以知道任何 API 或者我们是否需要编写新的 python 脚本来完成这项任务。

【问题讨论】:

aws cli 有一个您可以使用的sync 命令。据我所知,boto3 没有等价物。 正确..我们可以在 aws cli 中使用 sync 或 cp --recursive ..但我需要在 boto3 中。如果不是,我们是否需要编写自己的代码来实现这一点..我的理解正确吗? 一种方法是使用 Bucket.objects.all() 获取每个对象的迭代器并使用 s3transfer 复制它们。这是 objects.all() 或 filter() 示例:***.com/questions/36042968/… 【参考方案1】:

S3 存储对象,它不存储文件夹,即使 '/' 或 '\' 也是对象键名的一部分。您只需要操作键名并将数据复制过来。

import boto3
old_bucket_name = 'SRC'
old_prefix = 'A/B/C/'
new_bucket_name = 'TGT'
new_prefix = 'L/M/N/'
s3 = boto3.resource('s3')
old_bucket = s3.Bucket(old_bucket_name)
new_bucket = s3.Bucket(new_bucket_name)

for obj in old_bucket.objects.filter(Prefix=old_prefix):
    old_source =  'Bucket': old_bucket_name,
                   'Key': obj.key
    # replace the prefix
    new_key = obj.key.replace(old_prefix, new_prefix, 1)
    new_obj = new_bucket.Object(new_key)
    new_obj.copy(old_source)

zvikico 建议的定义new_key 的优化技术:

new_key = new_prefix + obj.key[len(old_prefix):]

【讨论】:

mootmoot 感谢您的回复。我在 python 中使用了拆分和子串逻辑。问题已解决 谢谢!最后一行的source 应该是old_source 吗? @CarlSmith :感谢您指出错误。代码已更新。 实际上,obj.key.replace(old_prefix, new_prefix) 是危险的,因为前缀可能不止一次被发现。这样做会更安全new_prefix + obj.key[len(old_prefix):] 您也可以保留一个dictold_source 实例并不断更新Key,而不是每次都重新构建它。

Boto3 AWS KMS 加密解密文件

...:我有一个python脚本尝试使用boto3使用AWSKMS加密文件。我可以将文件加密并写入文件。但是当我尝试使用第二部分代码解密文件时,它引发了如下错误,有人可以帮助解决这个问题还是有更好的解决方案?非常感谢。Traceback(最... 查看详情

S3 AWS 的 IAM 角色和密钥设置使用 boto3 访问两个不同的账户存储桶

...我有两个不同的帐户1)帐户一是供应商帐户,他们给了我们访问ID和访问密钥。2)我们拥有完全访问权限的帐户。我们需要使用boto3Python3.7 查看详情

AWS ECS Docker 容器 Boto3 IAM 权限

...运行权限)。为了让docker容器在我的本地机器上运行,我可以使用以下dockerrun命令 查看详情

Python - 在 cloud9 AWS (boto3) 上查找文件的路径

】Python-在cloud9AWS(boto3)上查找文件的路径【英文标题】:Python-Findingpathofafileoncloud9AWS(boto3)【发布时间】:2021-06-2411:29:08【问题描述】:我正在尝试将一个对象放入cloud9环境中的S3存储桶中该文件位于IDE内的同一文件夹中。我有一... 查看详情

使用 BOTO3 为 AWS Api Gateway 自动化 CORS

...即使每个方法在控制台中看起来都一样,POST到其余API也可以使用“启用CORS”按钮,但在使用我的代码设置 查看详情

使用 boto3 和 python 将 AWS EC2 详细信息导出到 xlsx/csv

】使用boto3和python将AWSEC2详细信息导出到xlsx/csv【英文标题】:ExportAWSEC2detailstoxlsx/csvusingboto3andpython【发布时间】:2020-10-3002:45:57【问题描述】:我是python和boto3的新手。我需要使用python获取以下详细信息,我正在使用bash获取这... 查看详情

AWS boto 和 boto3 有啥区别

...么区别【发布时间】:2015-11-2603:39:33【问题描述】:我是使用Python的AWS新手,我正在尝试学习botoAPI,但是我注意到Python有两个主要版本/包。那将是boto和boto3。AWSboto和boto3库有什么区别?【问题讨论】:【参考方案1 查看详情

如何使用 Boto3 在 AWS EMR 集群中等待步骤完成

】如何使用Boto3在AWSEMR集群中等待步骤完成【英文标题】:HowtowaitforastepcompletioninAWSEMRclusterusingBoto3【发布时间】:2017-06-2809:10:12【问题描述】:给定一个步骤ID,我想等待该AWSEMR步骤完成。我怎样才能做到这一点?有内置函数吗... 查看详情

使用 boto3 列出 100 多个堆栈

...tacksusingboto3【发布时间】:2017-01-0619:13:38【问题描述】:我们需要列出所有处于CREATE_COMPLETE状态的堆栈。在我们的AWS账户中,我们有超过400个这样的堆栈。我们为此编写了以下代码:stack_session=session.client(\'cloudformation\')list_stacks=... 查看详情

我们如何使用 python boto3 获取挂载到 EC2 实例的所有文件系统(EFS)的列表?

】我们如何使用pythonboto3获取挂载到EC2实例的所有文件系统(EFS)的列表?【英文标题】:Howcanwegetlistofallfilesystems(EFS)mountedtoanEC2instanceusingpythonboto3?【发布时间】:2020-03-1921:11:27【问题描述】:我在AWS上使用Boto3自动化了很多事... 查看详情

AWS:如何使用 Boto3 从实例创建公共 AMI?

】AWS:如何使用Boto3从实例创建公共AMI?【英文标题】:AWS:HowtocreateapublicAMIfrominstanceusingBoto3?【发布时间】:2020-01-2218:16:12【问题描述】:我能够在文档中找到有关如何从正在运行的实例创建AMI映像的信息。但我无法将其更改为... 查看详情

使用 boto3 在两个 AWS S3 存储桶之间移动文件

】使用boto3在两个AWSS3存储桶之间移动文件【英文标题】:MovefilesbetweentwoAWSS3bucketsusingboto3【发布时间】:2015-07-2114:31:18【问题描述】:我必须使用PythonBotoAPI将文件在一个存储桶之间移动到另一个存储桶。(我需要它从第一个桶... 查看详情

如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?

】如何使用pythonboto3将新角色权限附加到aws中的iam_role?【英文标题】:Howtoattachnewrolepermissionstoiam_roleinawsusingpythonboto3?【发布时间】:2021-02-2011:19:22【问题描述】:我正在尝试使用pythonboto3将新权限附加到现有IAM角色。我正在使... 查看详情

使用 boto3 在 aws 中其 CPU 扩展策略低于特定阈值的所有自动扩展组的列表

】使用boto3在aws中其CPU扩展策略低于特定阈值的所有自动扩展组的列表【英文标题】:listofallautoscalinggroupswhosescalingpolicyonCPUisbelowcertainthresholdinawsusingboto3【发布时间】:2021-04-2706:05:13【问题描述】:我有一堆ASG想要使用boto3来获... 查看详情

在 s3 python boto3 中替换文件

...thonboto3【发布时间】:2020-12-1219:02:18【问题描述】:如果我们必须使用python(lambda)将指定s3文件夹路径中的existingfile完全替换为另一个文件(withdifferentfilename)在任何时刻,s3中的特定文件夹路径都只有一个文件,在运行python代码时... 查看详情

确认设备上的 AWS Cognito Boto3 错误:给出的设备密钥无效

...ven【发布时间】:2020-03-2212:42:14【问题描述】:我一直在使用启用MFA的Python、Django和Boto3创建AWSCognito流。我的身份验证流程如下:initiate_auth:在djangorest端点上调用resp 查看详情

lambda,aws和python的自动化管理操作-自动创建快照,删除快照(代码片段)

...ormation的stack,会自动配置Lambda函数和DynamoDB数据库,然后我们可以通过标签来进行设置。从学习的角度,我们直接来弄一个超简易的版本。我们可以直接写两个Lambda函数,一个进行创建,一个进行删除。首先,设置一个ta 查看详情

AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到

...描述】:我正在尝试下载s3存储桶中的目录。我正在尝试使用传输从S3存储桶下载目录,但出现“调用HeadObject操作时 查看详情