Amazon S3 копирует несколько файлов из одной корзины в другую - PullRequest
0 голосов
/ 22 апреля 2020

У меня большой список объектов в исходной корзине S3, и я выборочно хочу скопировать подмножество объектов в целевую корзину. Что касается do c, то здесь это кажется возможным с TransferManager.copy(from_bucket, from_key, to_bucket, to_key), однако мне нужно делать это по одному.

Кто-нибудь знает о других способах, предпочтительно копировать в пакетная мода вместо вызова copy () для каждого объекта?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Если вы хотите sh скопировать весь каталог, вы можете использовать AWS Интерфейс командной строки (CLI) :

aws s3 cp --recursive s3://source-bucket/folder/* s3://destination-bucket/folder/

Однако, поскольку вы sh для выборочного копирования файлов, нет простого способа указать, какие файлы копировать (если они не имеют одинаковый префикс).

Честно говоря, когда мне нужно скопировать выборочные файлы, я фактически создаю файл Excel со списком имен файлов. Затем я создаю формулу, подобную этой:

="aws s3 cp s3://source-bucket/"&A1&" s3://destination-bucket/"

Затем просто используйте Fill Down , чтобы скопировать формулу. Наконец, скопируйте команды и вставьте их в окно терминала.

Если вы спрашиваете, существует ли способ программно копировать кратные значения между сегментами, используя один вызов API , тогда ответ будет нет, это невозможно . Каждый вызов API будет копировать только один объект. Однако вы можете одновременно запускать несколько команд копирования, чтобы ускорить процесс go.

0 голосов
/ 22 апреля 2020

Я думаю, что это возможно через консоль S3, но при использовании SDK такой опции нет. Хотя это не решение вашей проблемы, этот скрипт выборочно копирует объекты по одному за раз, и если вы читаете из внешнего файла, это просто вопрос ввода имен ваших файлов.

ArrayList<String> filesToBeCopied = new ArrayList<String>();
filesToBeCopied.add("sample.svg");
filesToBeCopied.add("sample.png");
String from_bucket_name = "bucket1";
String to_bucket = "bucket2";
BasicAWSCredentials creds = new BasicAWSCredentials("<key>","<secret>");
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.AP_SOUTH_1)
        .withCredentials(new AWSStaticCredentialsProvider(creds)).build();
ListObjectsV2Result result = s3.listObjectsV2(from_bucket_name);
List<S3ObjectSummary> objects = result.getObjectSummaries();
try {
    for (S3ObjectSummary os : objects) {
        String bucketKey = os.getKey();
        if (filesToBeCopied.contains(bucketKey)) {
             s3.copyObject(from_bucket_name, bucketKey, to_bucket, bucketKey);
        }
    }

} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
    System.exit(1);
}
...