aRt*_*too 3 bash amazon-s3 amazon-web-services
如何删除具有上次修改日期条件的多个 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
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,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存储桶删除具有日期条件的对象
LastModified您可以使用它来获取给定日期之前的对象列表:
aws s3api list-objects --bucket my-bucket --query "Contents[?LastModified<='2019-03-13'].[Key]" --output text
Run Code Online (Sandbox Code Playgroud)
请注意,它使用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})
Run Code Online (Sandbox Code Playgroud)