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

Axe*_*xel 5 amazon-s3 amazon-web-services aws-cli

我们有一个包含超过 500,000 个对象的存储桶。

我被分配了一份工作,我必须删除具有特定前缀的文件。存储桶中有大约 300,000 个具有给定前缀的文件。

例如, 如果有 3 个文件

abc_1file.txt
abc_2file.txt
abc_1newfile.txt
Run Code Online (Sandbox Code Playgroud)

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

关于如何自动执行此操作的任何建议?

Pie*_*e D 22

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

aws s3 rm --dryrun --recursive --exclude '*' --include 'abc_1*' s3://mybucket/my/path/to/topdir/
Run Code Online (Sandbox Code Playgroud)

为什么?

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

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


sip*_*ear 10

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

所以在你的情况下,命令是:

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

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

这些参数的行为记录在此处

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

  • 重要提示:操作顺序很重要!如果您确实包含第一个并排除第二个,则相同的命令可能会失败。 (6认同)
  • 很好,但请务必先看看它会用`--dryrun`删除什么! (3认同)