如何通过AWS CLI仅复制S3中指定子文件夹树到本地?
问题:通过AWS CLI复制S3中指定表的文件夹树到本地
需要将S3存储桶中指定表(table3、table4)的完整文件夹结构复制到本地,存储桶结构如下:
Bucket |_folder1 |_folder2 |_table1 |_DatePartition1 |_DatePartition2 |_table2 |_DatePartition1 |_DatePartition2 |_table3 |_DatePartition1 |_DatePartition2 |_table4 |_DatePartition1 |_DatePartition2
尝试了以下命令但均无效,要么报错要么复制全部内容:
aws s3 cp s3://bucketname/folder1/folder2 . --exclude "*/*" --include "table3*" --recursive # 或 aws s3 cp s3://bucketname/folder1/folder2 . --exclude "*" --include "table3*, tabl4*" --recursive
正确配置方案
AWS CLI的exclude/include规则是按参数顺序依次匹配,一旦命中就停止后续判断,且需正确使用通配符:
*:匹配当前目录下的任意文件/文件夹名**:匹配当前目录及其所有子目录下的任意内容
正确命令
aws s3 cp s3://bucketname/folder1/folder2 . --recursive --exclude "*" --include "table3/**" --include "table4/**"
命令逻辑说明
--recursive:必须添加,开启递归遍历子目录的功能--exclude "*":先排除目标路径下的所有内容--include "table3/**":覆盖排除规则,包含table3文件夹及其下所有子目录、文件--include "table4/**":同样覆盖排除规则,包含table4文件夹及其下所有内容
原命令错误原因
- 第一个命令:
--exclude "*/*"会排除所有二级目录(如table1/DatePartition1),但--include "table3*"仅匹配table3文件夹本身,无法包含其下的子目录,因此无法复制完整结构 - 第二个命令:
--include参数不能用逗号分隔多个规则,需单独设置;且table3*仅匹配table3文件夹名,无法匹配其下子内容,必须用table3/**
内容的提问来源于stack exchange,提问作者adbdkb
相关产品推荐
相关产品推荐

