我如何递归删除aws cli s3存储桶以日期条件删除对象
我正在使用此命令进行列表
aws s3 ls --recursive s3://uat-files-transfer-storage/ | awk '$1 < "2018-02-01 11:13:29" {print $0}' | sort -n
它运行完美,但是当我将此命令与rm一起使用时,它会删除所有文件
aws s3 rm --recursive s3://uat-files-transfer-storage/ | awk '$1 < "2018-02-01 11:13:29" {print $0}' | sort -n
任何解决方案
答案 0 :(得分:2)
下面的命令对我有用。
aws s3api list-objects-v2 --bucket "uat-files-transfer-storage" --query "Contents[?contains(LastModified, '2020-04-01')].{Key: Key}" --output text | xargs -n1 -t -I 'KEY' aws s3 rm s3://uat-files-transfer-storage/'KEY'
答案 1 :(得分:0)
您在正确的轨道上。要了解发生了什么,让我们逐步查看您的命令正在做什么。
aws s3 ls --recursive s3://uat-files-transfer-storage/ | awk '$1 < "2018-02-01 11:13:29" {print $0}' | sort -n
此命令递归列出存储桶中的所有文件,检查输出是否符合特定条件,然后对结果输出行进行排序。
aws s3 rm --recursive s3://uat-files-transfer-storage/ | awk '$1 < "2018-02-01 11:13:29" {print $0}' | sort -n
此命令以递归方式删除存储桶中的所有文件,检查特定条件下的输出,然后对结果输出行进行排序。因此,第二个命令首先删除所有文件!
您要做的是列出存储桶中的所有文件,检查它们是否符合特定条件,然后然后将其删除。这应该起作用:
aws s3 ls --recursive s3://uat-files-transfer-storage/ | awk '$1 < "2018-02-01 11:13:29" {print $4}' | xargs -n1 -t -I 'KEY' aws s3 rm s3://uat-files-transfer-storage/'KEY'
请小心!这不会在删除之前提示您,并且这是一种错误清除整个存储桶的简便方法。