将嵌套的 Amazon S3 文件夹复制到展平文件夹中
Copy nested Amazon S3 folders into flattened folder
长话短说,我们存储了类似 /accounts/account-abc/docs/uuid.pdf
的文档,这非常多余。我们要的基本上就是docs/uuid.pdf
。还有很多关于复制的其他帖子,但它们都是单个目录。我需要这样的东西(这显然是错误的):
aws s3 cp s3://accounts/*/docs s3://docs/ --recursive ---include "*"
我是否需要编写自定义脚本才能完成上述操作?
这是一个 Python 脚本,它将文件从给定 SOURCE_PATH
复制到 TARGET_PATH
,删除所有子文件夹:
import boto3
SOURCE_BUCKET = 'source-bucket'
SOURCE_PATH = 'accounts/'
TARGET_BUCKET = 'target-bucket'
TARGET_PATH = 'docs/'
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(SOURCE_BUCKET)
for object in bucket.objects.filter(Prefix=SOURCE_PATH):
target_key = object.key[object.key.rfind('/')+1:]
print('Copying', target_key)
s3_resource.Object(TARGET_BUCKET, TARGET_PATH + target_key).copy({'Bucket':SOURCE_BUCKET, 'Key': object.key})
# Optional, to delete source object:
# object.delete()
如果您只想从还包含 docs
的子目录(基于您的示例)的 SOURCE_PATH
进行复制,则可能需要对其进行修改。
长话短说,我们存储了类似 /accounts/account-abc/docs/uuid.pdf
的文档,这非常多余。我们要的基本上就是docs/uuid.pdf
。还有很多关于复制的其他帖子,但它们都是单个目录。我需要这样的东西(这显然是错误的):
aws s3 cp s3://accounts/*/docs s3://docs/ --recursive ---include "*"
我是否需要编写自定义脚本才能完成上述操作?
这是一个 Python 脚本,它将文件从给定 SOURCE_PATH
复制到 TARGET_PATH
,删除所有子文件夹:
import boto3
SOURCE_BUCKET = 'source-bucket'
SOURCE_PATH = 'accounts/'
TARGET_BUCKET = 'target-bucket'
TARGET_PATH = 'docs/'
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(SOURCE_BUCKET)
for object in bucket.objects.filter(Prefix=SOURCE_PATH):
target_key = object.key[object.key.rfind('/')+1:]
print('Copying', target_key)
s3_resource.Object(TARGET_BUCKET, TARGET_PATH + target_key).copy({'Bucket':SOURCE_BUCKET, 'Key': object.key})
# Optional, to delete source object:
# object.delete()
如果您只想从还包含 docs
的子目录(基于您的示例)的 SOURCE_PATH
进行复制,则可能需要对其进行修改。