You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在S3存储桶间递归复制数据并保留目录结构?

复制S3存储桶递归目录结构到目标桶的方法

一、使用AWS CLI(最便捷的批量方式)

AWS CLI的cp命令默认支持递归复制,且会完整保留源桶的前缀结构(即你看到的目录层级)。

全桶复制

直接执行以下命令,就能把源桶内所有对象(含所有子目录结构)复制到目标桶:

aws s3 cp s3://source-bucket/ s3://target-bucket/ --recursive

过滤复制(可选)

如果只需要复制特定类型文件,比如仅复制.txt文件,可结合排除/包含参数:

aws s3 cp s3://source-bucket/ s3://target-bucket/ --recursive --exclude "*" --include "*.txt"

二、使用S3控制台操作(可视化方式)

适合少量文件或不熟悉命令行的场景:

  • 打开S3控制台,进入源存储桶
  • 选中根路径下所有对象(或指定要复制的顶层目录)
  • 点击顶部「复制」按钮
  • 在弹窗中输入目标桶名称(如需放到目标桶的特定子路径,可追加前缀,比如s3://target-bucket/backup/)
  • 确认后启动复制,控制台会自动保留原有的目录层级结构

三、使用Python Boto3 SDK(自定义脚本场景)

如果需要自定义复制逻辑(比如增量同步、日志记录),可以用Boto3编写脚本:

import boto3

# 初始化S3客户端
s3 = boto3.client('s3')
source_bucket = "你的源桶名称"
target_bucket = "你的目标桶名称"

# 分页遍历源桶所有对象
paginator = s3.get_paginator('list_objects_v2')
for page in paginator.paginate(Bucket=source_bucket):
    if 'Contents' in page:
        for obj in page['Contents']:
            # 保留原对象的键(即目录+文件名)完成复制
            copy_source = {'Bucket': source_bucket, 'Key': obj['Key']}
            s3.copy(copy_source, target_bucket, obj['Key'])

关键注意事项

  • 权限要求:执行操作的IAM身份(用户/角色)需拥有源桶的s3:GetObject、s3:ListBucket权限,以及目标桶的s3:PutObject权限。
  • 跨区域复制:源桶和目标桶不在同一区域时,CLI、控制台、SDK都会自动处理跨区域传输,无需额外配置(若需长期自动同步可配置S3跨区域复制CRR)。
  • 增量同步:如果只需复制新增/更新的对象,CLI可添加--update参数:
    aws s3 cp s3://source-bucket/ s3://target-bucket/ --recursive --update
    

内容的提问来源于stack exchange,提问作者Oxana Grey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:05:36