我有以下S3桶结构:
s3://<bucket_name>/
|---object_1/
| |---images/
| | |---<image_11.jpg>
| | |---<image_12.jpg>
| |---annotation/
| | |---<image_11.xml>
| | |---<image_12.xml>
|---object_2/
| |---images/
| | |---<image_21.jpg>
| | |---<image_22.jpg>
| |---annotation/
| | |---<image_21.xml>
| | |---<image_22.xml>
我想将所有的图像和注释文件分别移动到两个单独的S3对象中,这样目标对象结构看起来像:
s3://<bucket_name>/
|---all-images/
| |---<image_11.jpg>
| |---<image_12.jpg>
| |---<image_21.jpg>
| |---<image_22.jpg>
|---all-annotation/
| |---<image_11.xml>
| |---<image_12.xml>
| |---<image_21.xml>
| |---<image_22.xml>
问题
我已经尝试了这个StackOverflow问题的解决方案,但它并没有改变S3对象的结构。所有文件都使用文件夹名称(此处为object_1/images/image_11.jpg
(进行复制。我希望所有的图像都在一个对象下(这里是all-images/<all_the_jpg_files>
(,没有目录结构。如何使用AWS CLI或Sage Maker笔记本实例实现这一点?
步骤1
使用此StackOverflow问题作为参考创建前缀列表。
步骤2
在前缀列表(此处为object_1
、obkect_2
…(和cp
或sync
上迭代源存储桶和目标存储桶。以下命令是我在Sage Maker笔记本实例上使用的命令。
!/bin/bash
for label in list_of_prefixes:
!aws s3 cp --recursive 's3://<bucket_name>/f"{label}"/images/' 's3://<bucket_name>/all-images/'