无前缀复制s3



我在s3中有类似的目录结构

bucket/folder1/*/*.csv

其中文件夹通配符是指包含csv文件的多个不同文件夹。我想在没有前缀的情况下复制它们

bucket/folder2/*.csv

例如:铲斗/折叠机1/

s3distcp --src=s3://bucket/folder1/ --dests3://bucket/folder2/ --srcPattern=.*/csv

导致不需要的结构:

bucket/folder2/*/*.csv

我需要一个可扩展的批量复制解决方案。我可以用s3distcp吗?我可以用aws s3 cp做到这一点吗(而不必对每个文件执行aws s3 cp(?

您应该尝试以下CLI命令

aws s3同步s3://SOURCE_BUCKET_NAME s3://DESTINATION_BUCKET_NAME--递归

没有快捷方式可以随心所欲,因为您正在操纵对象的路径。

你可以写一个小程序来做这件事,比如:

import boto3
BUCKET = 'my-bucket'
s3_client = boto3.client('s3', region_name = 'ap-southeast-2')
# Get a list of objects in folder1
response = s3_client.list_objects_v2(Bucket=BUCKET, Prefix='folder1')
# Copy files to folder2, keeping a flat hierarchy
for object in response['Contents']:
key = object['Key']
print(key)
s3_client.copy_object(
CopySource={'Bucket': BUCKET, 'Key': key},
Bucket=BUCKET,
Key = 'folder2' + key[key.rfind('/'):]
)

最终使用Apache Nifi来完成此操作,更改流文件的filename属性(使用regex删除最后一个"/"之前的所有路径(,并使用前缀写入所需目录。它的伸缩性非常好。

最新更新