我在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)吗?
答案 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删除最后一个'/'之前的所有路径),并在所需目录中添加前缀。它的缩放比例非常好。