как скопировать файлы и папки из одного сегмента S3 в другой S3, используя python boto3 - PullRequest
0 голосов
/ 28 января 2020

Я хочу скопировать файлы и папки из одной корзины s3 в другую. Я не могу найти решение, читая документы. Может копировать только файлы, но не папки из корзины s3. Вот мой код:

import boto3
s3 = boto3.resource('s3')
copy_source = {
    'Bucket': 'mybucket',
    'Key': 'mykey'
 }
s3.meta.client.copy(copy_source, 'otherbucket', 'otherkey')

Ответы [ 2 ]

2 голосов
/ 28 января 2020

S3 не имеет никакой концепции папок / каталогов. Это следует за плоской структурой. Например, кажется, что в пользовательском интерфейсе вы видите 2 файла внутри test_folder с именами file1.txt и file2.txt, но на самом деле два файла будут иметь ключи как «test_folder / file1.txt» и «test_folder / file2.txt». Каждый файл хранится в соответствии с этим соглашением об именах.

Вы можете использовать приведенный ниже фрагмент кода, чтобы скопировать каждый ключ в какой-либо другой сегмент.

import boto3
s3_client = boto3.client('s3')
resp = s3_client.list_objects_v2(Bucket='mybucket')
keys = []
for obj in resp['Contents']:
    keys.append(obj['Key'])



s3_resource = boto3.resource('s3')
for key in keys:
    copy_source = {
        'Bucket': 'mybucket',
        'Key': key
    }
    bucket = s3_resource.Bucket('otherbucket')
    bucket.copy(copy_source, 'otherkey')

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

Если это необходимо сделать для каждого события вставки в вашем сегменте, и вам необходимо скопировать его в другой сегмент, Вы можете оформить заказ этот подход .

1 голос
/ 28 января 2020

S3 - хранилище плоских объектов, там нет «папок». Он структурирован по ключевому префиксу для отображения в браузере S3. Для копирования «папки» необходимо скопировать все объекты с префиксом общего ключа.

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