使用 cli 根据文件中列出的名称从 s3 存储桶中删除文件

玛格达泽莱纳

我正在尝试从 Amazon S3 存储桶中删除多个(例如:数千个)文件。我在文件中列出了一个文件名,如下所示:

name1.jpg
name2.jpg
...
name2020201.jpg

我尝试了以下解决方案:

aws s3 rm s3://test-bucket --recursive --exclude "*" --include "data/*.*" 

这个问题但是 --include 只需要一个参数。我试图获得 hacky 并列出名称,--include "name1.jpg"但这也不起作用。

这种方法也行不通:

aws s3 rm s3://test-bucket < file.txt

你能帮忙吗?

玛格达泽莱纳

由于我的第一个答案需要很长时间才能完成,因此以下方法实际上要快得多。

我的第一种方法是使用rm命令一次删除一行这效率不高。大约 15 小时(!)后,它只删除了大约 40.000 条记录,占总数的 1/5。

Norbert Preining 的这种方法要快得多。正如他解释的那样,它使用称为delete-objects 的s3api 方法,该方法可以批量删除存储中的对象。此方法将一个 json 对象作为参数。要将文件名列表解析为所需的 JSON 对象,此脚本使用名为jq 的JSON 预处理器在此处阅读更多内容)。该脚本每次迭代需要 500 条记录。

cat file-with-names |  while mapfile -t -n 500 ary && ((${#ary[@]})); do
        objdef=$(printf '%s\n' "${ary[@]}" | ./jq-win64.exe -nR '{Objects: (reduce inputs as $line ([]; . + [{"Key":$line}]))}')
        aws s3api --no-cli-pager  delete-objects --bucket BUKET --delete "$objdef"
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用AWS CLI删除S3存储桶中的多个文件

如何使用 cli 访问 s3 存储桶中的文件以获取其他命令

如何使用CLI在AWS S3中删除版本存储桶?

使用 AWS CLI 从 AWS 存储桶中删除日志文件

AWS CLI 列出 S3 存储桶中的所有文件

如何使用AWS CLI仅复制S3存储桶中与给定字符串模式匹配的文件

如何使用NNP Papercut从S3存储桶中取消链接/删除文件和图像?

如何使用aws cli设置S3存储桶中文件的权限?

使用AWS CLI在S3存储桶中下载最新文件?

如何使用Spark Session列出S3存储桶中的文件?

从 s3 存储桶中删除文件

通过AWS CLI同步后,AWS S3存储桶中的文件不公开

如何在不使用AWS CLI的情况下使用S3专用存储桶下载文件

当我使用 AWS CLI 将文件上传到 S3 存储桶时,我是什么用户?

使用API在Amazon S3存储桶中创建文件夹/上传文件

如何使用AWS CLI从S3文件中删除特定标签

AWS CLI在s3存储桶中搜索文件并复制到其他文件夹

使用boto3,Python从S3存储桶中查找最新的CSV文件

根据创建日期删除Amazon s3存储桶中的日志文件

如何使用python从S3存储桶中读取.txt文件并查看内容?

使用Cloudformation在S3存储桶中创建文件夹

如何使用Boto将文件上传到S3存储桶中的目录

如何使用Boto将文件上传到S3存储桶中的目录

AWS S3:如何使用bash检查存储桶中是否存在文件

如何使用Terraform在Amazon S3存储桶中创建文件夹

无法使用Boto访问公共S3存储桶中的文件

使用 python boto 仅下载 S3 存储桶中的特定文件夹

使用特定子字符串从 s3 存储桶中获取文件列表

如何在使用Cloudfront上传的S3存储桶中获取文件?