Reputation: 171
Is it possible to copy/duplicate objects within one prefix to another prefix in the same s3 bucket?
Upvotes: 3
Views: 9846
Reputation: 3333
An alternative using boto3 resource
instead of client
:
bucket = boto3.resource("s3").Bucket(my_bucket_name)
copy_source = {"Bucket": my_bucket_name, "Key": my_old_key}
bucket.copy(copy_source, my_new_key)
Where my_bucket_name
, my_old_key
and my_new_key
are user defined variables.
Depending on the setup, additional arguments might be needed to instantiate a boto3 resource
. A more complete instantiation call would be:
boto3.resource(
"s3",
endpoint_url=my_endpoint_url,
aws_access_key_id=my_aws_access_key_id, # Do not expose me in source code!
aws_secret_access_key=my_aws_secret_access_key, # Do not expose me in source code!
)
Upvotes: 2
Reputation: 270224
You can use copy_object()
to copy an object in Amazon S3 to another prefix, another bucket and even another Region. The copying takes place entirely within S3, without needing to download/upload the object.
For example, to copy an object in mybucket
from folder1/foo.txt
to folder2/foo.txt
, you could use:
import boto3
s3_client = boto3.client('s3')
response = s3_client.copy_object(
CopySource='/mybucket/folder1/foo.txt', # /Bucket-name/path/filename
Bucket='mybucket', # Destination bucket
Key='folder2/foo.txt' # Destination path/filename
)
Upvotes: 5