删除AWS-S3存储桶中具有特定模式密钥的所有对象?

时间:2018-05-04 17:48:52

标签: javascript aws-sdk

我想删除具有特定模式的密钥的s3存储桶中的所有对象。我的问题??

  1. 我可以简单地在键值上传递正则表达式,如下面的代码所示吗?

  2. 一个选项是列出所有对象并过滤与正则表达式匹配的键,并将它们全部添加到deleteObjects方法中。我发现这效率低下。那么,还有其他方法吗? 会有很大的帮助吗?提前谢谢......

  3. 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);           
    });

2 个答案:

答案 0 :(得分:0)

假设您使用的是aws-sdk NPM模块,AWS.S3类不支持递归删除对象。

如果您真的不想执行多项操作来删除每个对象,请考虑使用支持基于文件夹前缀的--recursive删除的AWS CLI。从理论上讲,您可以在Node JS中执行aws cli,具体取决于系统凭据的配置方式。

https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html

答案 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运行删除脚本