Копирование содержимого корня AWS S3 Bucket в ту же корзину в подпапке - PullRequest
0 голосов
/ 17 июня 2019

Я хочу иметь возможность копировать файлы в том же сегменте из корневого каталога в подпапку в подпапке, но исключая эту подпапку, используя aws-sdk.

, то есть:

Я хочу использовать эту команду AWS-CLI в задаче файла gulp:

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

Я использовал примеры копирования, использованные из Как скопировать / переместить все объекты в Amazon S3 из одного префикса вдругие используют AWS SDK для 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);
  }
});

}

Я ожидаю, что содержимое root обновится last_good/20190817/, но не копирует саму папку last_good.

1 Ответ

0 голосов
/ 17 июня 2019

Я решил свое решение, используя опцию разделителя в параметрах s3.listObjects.

т.е:

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

это только список файлов в корне.

...