长话短说,我们有文档存储像这样的/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
复制(基于您的示例),则可能需要修改它。