我正在尝试使用AWS S3 Bucket中的bash脚本根据包含“DITN1_”和“DITS1_”时间的文件名仅删除仅超过5天的文件,但问题是所有文件我我试图删除如下所示:
DITN1_2016.12.01_373, DITS1_2012.10.10_141, DITN1_2016.12.01_3732, DITS1_2012.10.10_1412
如果有人可以帮我解决问题,那就太好了。
提前致谢
答案 0 :(得分:0)
您可以使用aws cli命令使用bash脚本删除内容,如下所示
aws s3 rm s3://mybucket/ --recursive --include "mybucket/DITN1*"
但是它不支持时间戳
有关详细信息,请参阅aws S3 cli
答案 1 :(得分:0)
使用对象的名称而不是元数据是否重要?您可以使用s3api获取存储桶中的对象列表:
aws s3api list-objects --bucket example --no-paginate # this last option will avoid pagination, don't use it if you have thousands of objects
添加
--query Contents[]
将返回每个对象的内容,包括LastModified部分,它将告诉您对象上次修改的时间,例如" 2016-12-16T13:56:23.000Z"。
http://docs.aws.amazon.com/cli/latest/reference/s3api/list-objects.html
您可以使用
将此时间戳更改为纪元date "+%s" -d "put the timestamp here"
并将其与当前时间 - 5天进行比较。
如果你真的想根据名字删除对象,你可以像这样循环键:
for key in $(aws s3api list-objects --bucket example --no-paginate --query Contents[].Key)
添加逻辑以确定日期。从你的例子判断,这样的事情可能会奏效:
key_without_prefix=${key#*_}
key_without_suffix=${key_without_prefix%_*}
然后你有你的日期,你可以将它与当前时间 - 5天进行比较。