将文件从S3子文件夹移动到S3存储桶根

时间:2020-09-09 19:24:17

标签: amazon-s3 cmd automation teamcity aws-cli

我需要将子文件夹的所有文件移动到s3存储桶根。

现在我正在使用cmd AWS CLI

aws s3 mv s3:\\testbucket\testsubfolder\testsubfolder2\folder s3:\\testbucket\

我的主要问题是,运行TeamCity后,子文件夹“文件夹”每天都会更改。是一种方法来知道“ testsubfolder2”内是否有一个新文件夹,并将其内容复制到S3bucket根目录吗?

我想实现这一点的自动化,因为我们每天都会运行报告并将其存储在S3中,但是TeamCity创建了一个项目文件夹树,我们需要将所有文件放在S3根目录上

谢谢。

2 个答案:

答案 0 :(得分:1)

当文件上传到此testsubfolder2目录中时,您可以触发Lambda。

从AWS上检查本教程:https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

请谨慎使用S3规则,因为AWS S3 MV在命令行后面使用COPY和DELETE,因此可以创建循环并增加账单。

答案 1 :(得分:1)

这是一些代码,它将给定前缀(以及该前缀下的子文件夹)中的所有对象移动到存储桶的根目录中。 (实际上,它先复制对象然后删除它。)

import boto3

BUCKET = 'stack-move'
PREFIX = 'foo1/foo2/'

s3_resource = boto3.resource('s3')

bucket = s3_resource.Bucket(BUCKET)

for object in bucket.objects.filter(Prefix=PREFIX):
    print(object.key)
    copy_source = {
        'Bucket': BUCKET,
        'Key': object.key
    }
    target_key = object.key[object.key.rfind('/')+1:] # Get just the name after the last slash

    # Copy the object
    target = bucket.Object(target_key) 
    target.copy(copy_source)

    # Delete the object
    object.delete()