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

标签 bash amazon-web-services amazon-s3

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

相关文章:

amazon-web-services - 为什么使用 AWS DynamoDb "Hello world"会产生读/写警报?

php - Heroku 连接到 RDS MySQL 时出现连接超时错误

amazon-web-services - 带有签名 URL : 403 Access Denied 的 AWS CloudFront

amazon-s3 - AWS S3在两个存储桶之间复制文件和文件夹

linux - bash 。 Shell 变量逻辑

linux - 当作为 cron 作业运行时,简单的 bash 脚本异步运行

linux - 如何使用 Linux 向特定列中的每个元素添加新数字

java - Bash 去除传递给 java 命令行应用程序的引号

PHP - 移动到 AWS S3 后删除本地文件 - 文本文件忙错误

node.js - 获取位于特定 S3 文件夹下的对象列表