如何删除多个具有上次修改 日期条件的 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
- 2019-03-13
并且想删除一个小于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。
谢谢!顺便说一句,我有这个作为引用。 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})
关于bash - 删除具有最后修改日期条件的多个 s3 存储桶文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55154576/