如何删除多个 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/
output:
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}'
捕捉第二个参数但仍然一无所获。顺便说一句,这是我第一次参加狂欢。
谢谢你!顺便说一句,我有这个作为参考。aws cli s3存储桶删除具有日期条件的对象 https://stackoverflow.com/questions/51375531/aws-cli-s3-bucket-remove-object-with-date-condition
您可以使用它来获取带有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})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)