我想删除具有特定模式的密钥的s3存储桶中的所有对象。我的问题??
我可以简单地在键值上传递正则表达式,如下面的代码所示吗?
一个选项是列出所有对象并过滤与正则表达式匹配的键,并将它们全部添加到deleteObjects方法中。我发现这效率低下。那么,还有其他方法吗? 会有很大的帮助吗?提前谢谢......
var params = {
Bucket: 'sample_bucket',
Delete: {
Objects: [
{
Key: '/video-044567/g' // here i want something like that
},
],
},
};
s3.deleteObjects(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
答案 0 :(得分:0)
假设您使用的是aws-sdk
NPM模块,AWS.S3类不支持递归删除对象。
如果您真的不想执行多项操作来删除每个对象,请考虑使用支持基于文件夹前缀的--recursive
删除的AWS CLI。从理论上讲,您可以在Node JS中执行aws cli,具体取决于系统凭据的配置方式。
答案 1 :(得分:0)
您可以使用aws cli:https://aws.amazon.com/cli/和一些Unix命令来完成此操作。
此aws cli命令应该起作用:
aws s3 rm selina-data-lake-test --exclude "*" --include "<your_regex>"
如果要包含子文件夹,则应添加标志-递归
或使用Unix命令:
aws s3 ls s3://<your_bucket_name>/ | awk '{print $4}' | xargs -I% <your_os_shell> -c 'aws s3 rm s3:// <your_bucket_name> /% $1'
说明: 列出存储桶中的所有文件-管道-> 获取第四个参数(其文件名)-pipe-> 使用aws cli运行删除脚本