Below is a ready-to-use script. Review and adapt variables to your environment.
#!/usr/bin/env python3
import boto3, os, sys
s3 = boto3.client('s3')
bucket = sys.argv[1]; prefix = sys.argv[2] if len(sys.argv)>2 else ''
local = sys.argv[3] if len(sys.argv)>3 else './backup'
os.makedirs(local, exist_ok=True)
paginator = s3.get_paginator('list_objects_v2')
for page in paginator.paginate(Bucket=bucket, Prefix=prefix):
for obj in page.get('Contents', []):
key = obj['Key']; path = os.path.join(local, key)
os.makedirs(os.path.dirname(path), exist_ok=True)
s3.download_file(bucket, key, path)
print('Done.')