删除具有上次修改日期条件的多个 s3 存储桶文件

aRt*_*too 3 bash amazon-s3 amazon-web-services

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

我在 s3 上有这个文件夹结构。

  • dentca 实验室开发样本
    • 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
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存储桶删除具有日期条件的对象

Joh*_*ein 6

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)

  • [适用于 Ruby 的 AWS 开发工具包文档](https://docs.aws.amazon.com/sdk-for-ruby/index.html#lang/en_us) (2认同)