如何删除具有最后修改日期日期条件的多个S3文件?
我在s3上具有此文件夹结构。
,并希望删除小于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
答案 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})