如何在S3存储桶中按名称删除旧文件?

时间:2019-03-20 13:50:48

标签: amazon-web-services amazon-s3

就像在S3-Bucket/Management/Lifecycles using prefixes中一样,我想修剪带有某些单词的旧文件。

我要删除以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

我目前正在测试生命周期前缀是否也适用于文件。

2 个答案:

答案 0 :(得分:1)

我认为您不能将生命周期规则与通配符(例如*screencast*)一起应用,而只能使用诸如“ taxes /”或“ taxes / 2010”之类的前缀。

对于您的情况,我可能会编写一个脚本(或也许是Athena查询)来为符合您的姓名/年龄条件的文件过滤S3 Inventory报告,然后修剪它们。

当然,您可以编写程序来执行此操作,如@John Rotenstein所建议。一次可能不理想的情况是,如果您拥有数百万或数十亿个对象,因为枚举对象列表的时间将很长。但是,对于一定数量的对象来说就可以了。

答案 1 :(得分:0)

您可以编写一个程序来执行此操作,例如以下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})

您可以将其修改为“一年前”,而不是特定的日期。