我正在尝试从 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] 删除。
我来说两句