gpt4 book ai didi

bash - 删除具有最后修改日期条件的多个 s3 存储桶文件

转载 作者:行者123 更新时间:2023-12-02 03:19:45 25 4
gpt4 key购买 nike

如何删除多个具有上次修改 日期条件的 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/

输出:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com