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

如何实现仅复制S3源桶指定文件夹内的文件到目标桶指定文件夹

实现S3指定文件夹复制到目标文件夹

以下是修改后的代码,可实现仅复制源桶指定文件夹内的文件到目标桶的指定文件夹:

import boto3
from sagemaker import get_execution_role

role = get_execution_role()
print(role)

sts_client = boto3.client('sts')

assumed_role_object=sts_client.assume_role(
    RoleArn=role,
    RoleSessionName="AssumeRoleSession1"
)

print(assumed_role_object)

# 获取临时凭证
credentials=assumed_role_object['Credentials']

# 初始化S3资源
s3_resource=boto3.resource(
    's3',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
)

# 配置参数
src_bucket = "source_bucket"
dest_bucket = "destination_bucket"
# 指定源文件夹前缀(末尾加斜杠避免匹配类似前缀的对象)
src_folder_prefix = "source_folder/"
# 指定目标文件夹前缀
dest_folder_prefix = "target_folder/"

# 仅遍历源桶中指定文件夹下的对象
for obj in s3_resource.Bucket(src_bucket).objects.filter(Prefix=src_folder_prefix):
    # 跳过虚拟文件夹本身(S3中文件夹是前缀,无实际内容)
    if obj.key == src_folder_prefix:
        continue
    
    # 构造复制源
    copy_source = {
        'Bucket': src_bucket,
        'Key': obj.key
    }
    
    # 生成目标Key:替换源前缀为目标前缀
    dest_key = obj.key.replace(src_folder_prefix, dest_folder_prefix, 1)
    
    print(f"复制 {obj.key} 到 {dest_key}")
    s3_resource.meta.client.copy(copy_source, dest_bucket, dest_key)

关键修改说明:

  • 过滤源文件夹对象:使用objects.filter(Prefix=src_folder_prefix)替代objects.all(),只获取指定前缀下的对象,末尾加斜杠确保只匹配该文件夹下的内容,不会误匹配如source_folder_other/这类前缀相似的路径。
  • 跳过虚拟文件夹:S3中的文件夹是虚拟的,会以空对象形式存在(key为文件夹前缀),通过if obj.key == src_folder_prefix: continue跳过这类无意义的空对象。
  • 生成目标路径:通过replace方法将源路径的前缀替换为目标文件夹前缀,确保文件复制到指定的目标目录下,1参数表示只替换第一次出现的前缀,避免路径中其他相同字符串被误替换。

内容的提问来源于stack exchange,提问作者Mark Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:18