与S3桶/管理/生命周期使用前缀类似,我想要删除一些旧文件,这些文件包含特定的单词。
我希望删除那些以Screenshot
开头或文件名中包含screencast
且创建日期超过365天的文件。
示例
/Screenshot 2017-03-19 10.11.12.png
folder1/Screenshot 2019-03-01 14.31.55.png
folder2/sub_folder/project-screencast.mp4
我目前正在测试生命周期前缀是否也适用于文件。
与S3桶/管理/生命周期使用前缀类似,我想要删除一些旧文件,这些文件包含特定的单词。
我希望删除那些以Screenshot
开头或文件名中包含screencast
且创建日期超过365天的文件。
/Screenshot 2017-03-19 10.11.12.png
folder1/Screenshot 2019-03-01 14.31.55.png
folder2/sub_folder/project-screencast.mp4
我目前正在测试生命周期前缀是否也适用于文件。
您可以编写一个程序来完成这个任务,比如这个Python脚本:
import boto3
s3 = boto3.client('s3', region_name='ap-southeast-2')
response = s3.list_objects_v2(Bucket='my-bucket')
keys_to_delete = [{'Key': object['Key']}
for object in response['Contents']
if object['LastModified'] < datetime(2018, 3, 20)
and ('Screenshot' in object['Key'] or 'screencast' in object['Key'])
]
s3.delete_objects(Bucket='my-bucket', Delete={'Objects': keys_to_delete})
我不相信你可以使用通配符(如*screencast*
)应用生命周期规则,只能使用前缀(如“taxes/”或“taxes/2010”)。
针对您的情况,我可能会编写一个脚本(或者可能是Athena查询),过滤S3 Inventory报告中与您的名称/年龄条件匹配的文件,然后将它们删除。
当然,您可以像@John Rotenstein建议的那样编写程序来执行此操作。唯一不理想的情况是如果您有数百万或数十亿个对象,因为枚举对象列表所需的时间将是显着的。但是对于合理数量的对象来说,这是可以接受的。