简体   繁体   中英

How to copy all files from one folder to another folder in the same S3 bucket

I am trying to copy all files from one folder to another folder in the s3 bucket. I see a lot of examples for moving from one bucket to another but not from one folder to another.

from the examples I have seen online, I have written the following code.

import boto3
s3_resource = boto3.resource('s3')
src = 'old_folder'
dest = 'new_folder'

for key in s3_resource.list_objects(Bucket=config.S3_BUCKET)['Contents']:
    files = key['Key']
    copy_source = {'Bucket': config.S3_BUCKET, 'Key': f'{src}/{files}'}
    s3_resource.meta.client.copy(
        copy_source, f'{config.S3_BUCKET}/{dest}/', f'{src}/{files}')

however, when I run the code, I get the following error:

AttributeError: 's3.ServiceResource' object has no attribute 'list_objects'

for the following line: for key in s3_resource.list_objects(Bucket=config.S3_BUCKET)['Contents']:

I believe I am getting the error because I am using boto3.resource(s3) instead of boto3.client(s3) however the examples I have seen online seem to be using boto3.resource(s3) to move files from one bucket to another.

What is the correct approach to take to move all files from one folder to another folder in the same bucket in s3 using python?

I modified the code and also added pagination. Please have a look at it:

s3 = boto3.client('s3')

src = 'old_folder'
dest = 'new_folder'

paginator = s3.get_paginator('list_objects')

operation_parameters = {'Bucket': config.S3_BUCKET,
                        'Prefix': src}

page_iterator = paginator.paginate(**operation_parameters)

for page in page_iterator:
    for obj in page['Contents']:
        file = obj['Key']
        #print(file)    
        dest_key = file.replace(src, dest)
        #print("dest_key)
        s3.copy_object(Bucket=config.S3_BUCKET, 
                       CopySource=f'/{config.S3_BUCKET}/{file}', 
                       Key=dest_key)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM