将嵌套的 Amazon S3 文件夹复制到展平文件夹中

Copy nested Amazon S3 folders into flattened folder

长话短说,我们存储了类似 /accounts/account-abc/docs/uuid.pdf 的文档,这非常多余。我们要的基本上就是docs/uuid.pdf。还有很多关于复制的其他帖子,但它们都是单个目录。我需要这样的东西(这显然是错误的):

aws s3 cp s3://accounts/*/docs s3://docs/  --recursive ---include "*"

我是否需要编写自定义脚本才能完成上述操作?

这是一个 Python 脚本,它将文件从给定 SOURCE_PATH 复制到 TARGET_PATH,删除所有子文件夹:

import boto3

SOURCE_BUCKET = 'source-bucket'
SOURCE_PATH = 'accounts/'

TARGET_BUCKET = 'target-bucket'
TARGET_PATH = 'docs/'

s3_resource = boto3.resource('s3')

bucket = s3_resource.Bucket(SOURCE_BUCKET)

for object in bucket.objects.filter(Prefix=SOURCE_PATH):
    target_key = object.key[object.key.rfind('/')+1:]
    print('Copying', target_key)
    s3_resource.Object(TARGET_BUCKET, TARGET_PATH + target_key).copy({'Bucket':SOURCE_BUCKET, 'Key': object.key})
    # Optional, to delete source object:
    # object.delete()

如果您只想从还包含 docs 的子目录(基于您的示例)的 SOURCE_PATH 进行复制,则可能需要对其进行修改。