繁体   English   中英

如何使用 AWS CLI 递归删除大小为 0 的 S3 对象

[英]How to Recursively Delete S3 Objects of Size 0 using the AWS CLI

是否有使用 AWS CLI 删除前缀下所有大小为 0 的对象的简单方法?

例如,如果我们的 s3 前缀如下所示:

$ aws s3 ls --recursive s3://bucket/prefix
2022-04-20 10:39:51          0 empty_file
2022-04-20 10:39:52         21 top_level_file
2022-04-14 15:01:34          0 folder_a/nested_empty_file
2022-04-23 03:35:02         42 folder_a/dont_delete_me

我想要一个 aws cli 命令行调用来删除empty_filefolder_a/nested_empty_file

我知道这可以通过boto或任何其他数量的 s3 api 实现来完成,但感觉我应该能够从命令行在一行中完成它,因为它很简单。

使用aws s3api子命令和jq进行 json 争论,我们可以执行以下操作:

aws s3api delete-objects --bucket bucket --delete "$(aws s3api list-objects-v2 --bucket bucket --prefix prefix --query 'Contents[?Size==`0`]' | jq -c -r '{ "Objects": [.[] | {"Key": .Key}] }')"

aws s3api尚不支持从 stdin 读取(参见此处的 GH PR: https://github.com/aws/aws-cli/pull/3209 )因此我们需要通过子 shell 扩展传递对象列表,即不幸的是有点尴尬,但仍然符合我作为单行者的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM