Копировать без префикса s3 - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть структуры каталогов в s3, например

bucket/folder1/*/*.csv

Где подстановочный знак папки относится к ряду различных папок, содержащих файлы csv.Я хочу скопировать их без префикса в

bucket/folder2/*.csv

Например: bucket / folder1 /

s3distcp --src=s3://bucket/folder1/ --dests3://bucket/folder2/ --srcPattern=.*/csv

В результате получается нежелательная структура:

bucket/folder2/*/*.csv

Мне нужно решение для массового копирования, которое масштабируется.Могу ли я сделать это с s3distcp?Могу ли я сделать это с помощью aws s3 cp (без необходимости выполнения aws s3 cp для файла)?

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Нет ярлыка, чтобы делать то, что вы хотите, потому что вы манипулируете путем к объектам.

Вместо этого вы могли бы написать небольшую программу для этого, например:

import boto3

BUCKET = 'my-bucket'

s3_client = boto3.client('s3', region_name = 'ap-southeast-2')

# Get a list of objects in folder1
response = s3_client.list_objects_v2(Bucket=BUCKET, Prefix='folder1')

# Copy files to folder2, keeping a flat hierarchy
for object in response['Contents']:
    key = object['Key']
    print(key)
    s3_client.copy_object(
        CopySource={'Bucket': BUCKET, 'Key': key},
        Bucket=BUCKET,
        Key = 'folder2' + key[key.rfind('/'):]
    )
0 голосов
/ 17 января 2019

Закончено использование Apache Nifi для этого, изменение атрибута имени файла потокового файла (используйте regex, чтобы удалить весь путь перед последним '/') и запись с префиксом в нужный каталог.Он очень хорошо масштабируется.

0 голосов
/ 20 декабря 2018

Вы должны попробовать следующую команду CLI

aws s3 sync s3: // SOURCE_BUCKET_NAME s3: // DESTINATION_BUCKET_NAME --recursive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...