【问题标题】:Copying AWS S3 Bucket root contents to same bucket within subfolder将 AWS S3 存储桶根内容复制到子文件夹中的同一存储桶
【发布时间】:2019-10-30 21:48:09
【问题描述】:

我希望能够将同一存储桶中的文件从根目录复制到子文件夹中的子文件夹,但使用 aws-sdk 排除该子文件夹。

即:

我想在 gulp 文件任务中使用这个 AWS-CLI 命令:

aws s3 cp s3://bucketName s3://bucketName/last_good/YYYYMMDD --recursive --exclude "last_good/*"

我使用了来自How to copy/move all objects in Amazon S3 from one prefix to other using the AWS SDK for Node.js的复制示例

我只是不确定如何指定要排除的文件夹。在我上面的示例中,它将是 last_good 文件夹。

var gulp = require('gulp');
var AWS = require('aws-sdk');
var async = require('async');
var bucketName = 'bucketname';
var oldPrefix = '';
var newPrefix = 'last_good/20190817/';
var s3 = new AWS.S3({params: {Bucket: bucketName}, region: 'us-west-2'});

gulp.task('publish', function() {
     CopyToLastGood();
}

function CopyToLastGood() {
    var done = function(err, data) {
      if (err) console.log(err);
      else console.log(data);
    };

s3.listObjects({Prefix: oldPrefix}, function(err, data) {
  if (data.Contents.length) {
    async.each(data.Contents, function(file, cb) {
      var params = {
        CopySource: bucketName + '/' + file.Key,
        Key: file.Key.replace(oldPrefix, newPrefix)
      };
      s3.copyObject(params, function(copyErr, copyData){
        if (copyErr) { // an error occured
          console.log(err);
        }
        else {
          console.log('Copied: ', params.Key); //successful response
          cb();
        }
      });
    }, done);
  }
});

}

我希望根目录的内容会更新 last_good/20190817/,但不会复制 last_good 文件夹本身。

【问题讨论】:

    标签: node.js amazon-s3 gulp aws-sdk aws-cli


    【解决方案1】:

    我已经使用 s3.listObjects 参数上的分隔符选项解决了我的解决方案。

    即:

    s3.listObjects({Prefix: oldPrefix, Delimiter:'/'}
    

    这仅列出根目录中的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-07
      • 2017-11-23
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多