使用上次修改日期条件删除多个s3存储桶文件

时间:2019-03-14 03:34:25

标签: bash amazon-web-services amazon-s3

如何删除具有最后修改日期日期条件的多个S3文件?

我在s3上具有此文件夹结构。

  • dentca-lab-dev-sample
    • 2019-03-13
      • file1上次修改时间:2019年3月13日下午2:34:06 GMT-0700
      • file2上次修改时间:2019年3月13日下午3:18:01 GMT-0700
      • file3上次修改时间:2019年3月13日下午2:34:30 GMT-0700
      • file4上次修改时间:2019年3月13日下午2:32:40 GMT-0700

,并希望删除小于Mar 13, 2019 2:34:30 PM

的文件(这只是一个示例)

所以我制作了这个bash脚本,但是它不起作用。

aws s3 ls --recursive s3://dentca-lab-dev-sample/2019-03-13/ | awk '$1 <= "2019-03-13 14:34:30" {print $4}'

** ls仅用于测试。将其更改为rm

我也有用于测试的脚本

aws s3 ls --recursive s3://dentca-lab-dev-sample/2019-03-13/

输出:

2019-03-13 14:34:06   11656584 2019-03-13/mandibular.stl
2019-03-13 15:18:01   11969184 2019-03-13/maxillary.stl
2019-03-13 14:34:30    9169657 2019-03-13/obj.obj
2019-03-13 14:32:40   15690284 2019-03-13/upperAIO_50005.stl

但是当我执行awk来创建条件时不起作用。可能是因为$1仅捕获了这种折衷方法2019-03-13并将其即时转换为2019-03-13 14:34:30

也尝试这样做。 awk '$1 $2 <= "2019-03-13 14:34:30" {print $4}'抓住了第二个论点,但还是一无所获。这是我的第一个bash btw。

谢谢!我将其作为参考。 aws cli s3 bucket remove object with date condition

1 个答案:

答案 0 :(得分:1)

您可以使用它来获取给定日期前带有LastModified的对象的列表:

aws s3api list-objects --bucket my-bucket --query "Contents[?LastModified<='2019-03-13'].[Key]" --output text

请注意,它使用s3api而不是s3,后者可以访问更多信息。

然后您可以获取结果并将其泵入aws s3 rm中以删除对象。

坦率地说,如果您希望获得这样的细粒度,我建议您使用Python而不是bash。就像这样:

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(2019, 3, 13)]
s3.delete_objects(Bucket='my-bucket', Delete={'Objects': keys_to_delete})