如何使用 python boto3 将文件和文件夹从一个 S3 存储桶复制到另一个 S3

The*_*ker -2 python amazon-s3 amazon-web-services python-3.x boto3

我想将文件和文件夹从一个 s3 存储桶复制到另一个存储桶。我无法通过阅读文档找到解决方案。只能从 s3 存储桶复制文件,但不能复制文件夹。这是我的代码:

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 'mybucket',
    'Key': 'mykey'
 }
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')
Run Code Online (Sandbox Code Playgroud)

Rah*_*oel 5

S3 没有任何文件夹/目录的概念。它遵循扁平结构。例如,在 UI 上,您会在 test_folder 中看到两个名为 file1.txt 和 file2.txt 的文件,但实际上两个文件的键分别为“test_folder/file1.txt”和“test_folder/file2.txt”。每个文件都使用此命名约定存储。

您可以使用下面给出的代码片段将每个密钥复制到其他存储桶。

import boto3
s3_client = boto3.client('s3')
resp = s3_client.list_objects_v2(Bucket='mybucket')
keys = []
for obj in resp['Contents']:
    keys.append(obj['Key'])



s3_resource = boto3.resource('s3')
for key in keys:
    copy_source = {
        'Bucket': 'mybucket',
        'Key': key
    }
    bucket = s3_resource.Bucket('otherbucket')
    bucket.copy(copy_source, 'otherkey')
Run Code Online (Sandbox Code Playgroud)

如果您的源存储桶包含许多键,并且这是一次性活动,那么我建议您查看此链接

如果需要对存储桶上的每个插入事件执行此操作,并且您需要将其复制到另一个存储桶,则可以查看此方法