复制不带前缀s3

时间:2018-12-19 20:10:03

标签: amazon-web-services amazon-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)吗?

3 个答案:

答案 0 :(得分:1)

您应该尝试以下CLI命令

aws s3 sync s3:// SOURCE_BUCKET_NAME s3:// DESTINATION_BUCKET_NAME-递归

答案 1 :(得分:1)

没有捷径可做您想做的事情,因为您正在操纵对象的路径。

您可以编写一个小程序来做到这一点,例如:

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('/'):]
    )

答案 2 :(得分:0)

最后使用Apache Nifi进行此操作,更改了流文件的filename属性(使用regex删除最后一个'/'之前的所有路径),并在所需目录中添加前缀。它的缩放比例非常好。