Amazon web services 使用cli根据文件中列出的名称从s3存储桶中删除文件
我试图从AmazonS3 bucket中删除多个(比如:数千个)文件。 我在文件中列出了一个文件名,如下所示:Amazon web services 使用cli根据文件中列出的名称从s3存储桶中删除文件,amazon-web-services,amazon-s3,command-line-interface,Amazon Web Services,Amazon S3,Command Line Interface,我试图从AmazonS3 bucket中删除多个(比如:数千个)文件。 我在文件中列出了一个文件名,如下所示: name1.jpg name2.jpg ... name2020201.jpg 我尝试了以下解决方案: aws s3 rm s3://test-bucket --recursive --exclude "*" --include "data/*.*" from-but--include只接受一个参数。 我试着用hacky来列出名字,比如——
name1.jpg
name2.jpg
...
name2020201.jpg
我尝试了以下解决方案:
aws s3 rm s3://test-bucket --recursive --exclude "*" --include "data/*.*"
from-but--include只接受一个参数。
我试着用hacky来列出名字,比如——包括“name1.jpg”
,但这也不起作用
这种方法也不起作用:
aws s3 rm s3://test-bucket < file.txt
aws s3 rm s3://test bucket
你能帮忙吗?我用这个简单的bash脚本解决了这个问题:
#!/bin/bash
set -e
while read line
do
aws s3 rm s3://test-bucket/$line
done <files.txt
#/bin/bash
set-e
读行时
做
aws s3 rm s3://测试桶/$行
完成以下方法实际上要快得多,因为我的第一个答案花了很长时间才完成
我的第一种方法是使用rm
命令一次删除一行。这是没有效率的。大约15小时后(!)它只删除了大约40000条记录,占总数的1/5
由诺伯特·普雷宁所作,速度更快。正如他所解释的,它使用名为删除对象的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
您是否尝试过这个aws s3 rm s3://测试桶--递归--排除“*”--包括“data/*.jpg”
是的,实际上我没有“=”符号,这是正确的,我会修复它。但这个例子并不能解决问题,答案是肯定的