如何使用S3 CLI按文件名前缀筛选下载S3存储桶图片
问题:如何通过S3 CLI选择性下载以202312开头的文件?
需要从S3存储桶下载文件名以202312开头的图片,当前全量下载命令会获取所有历史文件,尝试使用--include参数的命令未下载任何文件。
示例S3文件路径:
https://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/20231203-6de2d5dd-7303-4841-b35c-c69e1b35d9f0.jpg https://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/20231201-030e87e7-3a61-4748-bfa4-fbd10a2a2ecf.jpg https://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/20231208-2220bc6b-fa21-4df9-b4d4-a47e988cab0d.jpg https://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/20231203-a4939bde-4a14-414e-9d1a-0a89912a4f63.jpg https://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/20231205-c2ca109d-8f7f-43ba-bd47-d6782bae0d5e.jpg https://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/20231205-cf76fe0a-733c-4317-a0a6-a0ecd0860794.jpg
当前全量下载命令:
aws s3 sync s3://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/ ./local-directory
尝试失败的命令:
aws s3 sync s3://optimus-ai.s3.ca-central-1.amazonaws.com/clients/chatbot/prod/ ./local-directory --exclude "*" --include "20231201*"
解决方案
正确命令
aws s3 sync s3://optimus-ai/clients/chatbot/prod/ ./local-directory --exclude "*" --include "202312*"
关键修正点
修正S3路径格式:
S3 CLI的桶路径无需包含区域域名(s3.ca-central-1.amazonaws.com),正确格式为s3://桶名/对象前缀,即s3://optimus-ai/clients/chatbot/prod/,这是之前命令失效的核心原因之一。调整匹配规则:
原命令的--include "20231201*"仅匹配12月1日的文件,改为202312*即可覆盖所有12月开头的文件。参数顺序要求:
必须先写--exclude "*"再写--include规则,因为S3 CLI会按顺序应用过滤逻辑:先排除所有对象,再重新包含符合条件的对象。
额外技巧
- 预览匹配文件:添加
--dryrun参数可预览将下载的文件列表,不会实际执行下载操作:aws s3 sync s3://optimus-ai/clients/chatbot/prod/ ./local-directory --exclude "*" --include "202312*" --dryrun - 强制同步更新:如果需要覆盖本地已有文件或删除本地不存在的对应文件,可添加
--delete参数(谨慎使用,避免误删本地文件):aws s3 sync s3://optimus-ai/clients/chatbot/prod/ ./local-directory --exclude "*" --include "202312*" --delete
内容的提问来源于stack exchange,提问作者Kank Moiz
相关产品推荐
相关产品推荐

