仅删除具有给定前缀的 S3 文件

仅删除具有给定前缀的 S3 文件

我们有一个存储桶,里面有超过 500,000 个对象。

我被分配了一项任务,需要删除具有特定前缀的文件。存储桶中大约有 300,000 个具有给定前缀的文件。

例如 如果有 3 个文件

abc_1file.txt
abc_2file.txt
abc_1newfile.txt

我只需要删除带有 abc_1 前缀的文件。我在 AWS 文档中没有找到太多与此相关的内容。

关于如何实现自动化,有什么建议吗?

答案1

您可以使用aws s3 rm带有--include--exclude参数的命令为您想要删除的文件指定一个模式。

因此,对于你的情况,命令将是:

aws s3 rm s3://bucket/ --recursive --exclude "*" --include "abc_1*"

这将删除存储桶中与“abc_1*”模式匹配的所有文件。

在实际运行上述命令之前,请务必使用试运行标志验证要删除的内容,例如aws s3 rm --dryrun s3://bucket/ --recursive --exclude "*" --include "abc_1*"

这些参数的行为是有记录的这里

这些说明假设您已经下载、安装并配置了AWS CLI 工具

答案2

作为@sippybear 出色回答的补充,如果某人有一个包含一万亿个对象的存储桶,并且想要删除的文件模式包括“父目录”,我建议如下'my/path/to/topdir/abc_1*'

aws s3 rm --dryrun --recursive --exclude '*' --include 'abc_1*' s3://mybucket/my/path/to/topdir/

为什么?

  1. 这会将要删除的对象的搜索限制在父目录中,从而大大加快操作速度;
  2. 真的,帮自己一个忙,从开始--dryrun,即使你立即中断它(ctrl-C);拼写错误和其他意外发生,并且在删除存储桶中的大量文件时出错可能会非常令人遗憾(即使你有适当的备份)......

一旦您对即将删除的内容感到满意,请删除--dryrun

相关内容