我需要将子文件夹的所有文件移动到s3存储桶根。
现在我正在使用cmd AWS CLI
aws s3 mv s3:\\testbucket\testsubfolder\testsubfolder2\folder s3:\\testbucket\
我的主要问题是,运行TeamCity后,子文件夹“文件夹”每天都会更改。是一种方法来知道“ testsubfolder2”内是否有一个新文件夹,并将其内容复制到S3bucket根目录吗?
我想实现这一点的自动化,因为我们每天都会运行报告并将其存储在S3中,但是TeamCity创建了一个项目文件夹树,我们需要将所有文件放在S3根目录上
谢谢。
答案 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()