Windows 使用 AWS CLI 一键同步本地目录到 S3(保留目录结构、可断点续传)
本文介绍如何在 Windows 上使用 AWS CLI,将本地目录 G:\awss3\profile 整体同步到 S3 存储桶 bucket-name 的 common/profile/ 前缀下,并解释命令行为、断网恢复机制及验证方法。
1. 目标与效果
目标
将本地目录:
G:\awss3\profile\
完整上传到:
s3://bucket-name/common/profile/
最终结构示例
假设本地存在:
G:\awss3\profile\avatar\1.pngG:\awss3\profile\upload\a\b\c.jpg
上传后在 S3 中对应为:
s3://bucket-name/common/profile/avatar/1.pngs3://bucket-name/common/profile/upload/a/b/c.jpg
说明:S3 的“文件夹”本质是对象 Key 的前缀(prefix),控制台展示为目录层级,但底层仍是对象键名字符串。
2. 前置条件
- 已安装 AWS CLI v2
- 已完成凭证与默认区域配置(或后续使用
--profile显式指定)
验证 AWS CLI 是否可用:
aws --version验证是否能访问目标桶(需要具备 List/Put 权限):
aws s3 ls s3://bucket-name/3. 核心命令
执行同步上传:
aws s3 sync "G:\awss3\profile" "s3://bucket-name/common/profile/" --only-show-errors参数解释
-
aws s3 sync同步本地目录与 S3 目标前缀,使目标端与源端内容一致(在不加--delete的情况下,只上传缺失/变更项,不会删除目标多余文件)。 -
"G:\awss3\profile"本地源目录。CLI 会递归遍历该目录下所有文件与子目录。 -
"s3://bucket-name/common/profile/"S3 目标路径:桶名为bucket-name,对象前缀为common/profile/。 -
--only-show-errors只输出错误信息,减少控制台噪音,适合大量文件上传。
4. 命令会做什么:同步策略与覆盖规则
aws s3 sync 的核心逻辑是“比较后上传”:
-
遍历本地文件,计算相对路径。
-
对比 S3 端同 Key 的对象(主要依据大小、修改时间等元数据)。
-
仅上传新增或发生变化的文件。
-
默认情况下:
- 不会删除 S3 端多出来的文件(除非显式加
--delete) - 会覆盖 S3 端同 Key 且被判定为“不同”的对象
- 不会删除 S3 端多出来的文件(除非显式加
因此,重复执行同一条 sync 命令通常是安全且常见的操作。
5. 断网/中断后的行为:如何恢复
5.1 中断会发生什么
上传过程中若出现断网、VPN 掉线、电脑休眠等情况:
- 当前正在传输的文件可能上传失败或中止
- 其他未开始的文件当然不会上传
- 已成功上传的文件保持在 S3 中,不会回滚
5.2 恢复方式(关键要点)
直接重新执行同一条命令即可:
aws s3 sync "G:\awss3\profile" "s3://bucket-name/common/profile/" --only-show-errors恢复机制说明:
sync会再次比较本地与 S3- 已经成功上传且未变化的文件会被跳过
- 缺失或未完成的文件会继续上传
- 这相当于“可重复执行的增量同步”,实践中可视为断点续传式体验(无需人工记录进度)
注意:这里的“续传”是基于“已完成对象不重复上传、未完成对象会重传”的同步语义,而不是对单个小文件进行真正的分片续传。对于你这种 300–500KB 的小文件,重传成本很低,整体效果接近续传。
6. 上传完成后的验证方法
6.1 查看上传结果汇总(推荐)
递归列出并汇总总大小与对象数:
aws s3 ls "s3://bucket-name/common/profile/" --recursive --human-readable --summarize6.2 预检查是否还存在差异(Dry Run)
不实际上传,仅展示将要执行的操作:
aws s3 sync "G:\awss3\profile" "s3://bucket-name/common/profile/" --dryrun若输出为空或无待上传项,通常表示源端与目标端已一致。
7. 常见注意事项
-
谨慎使用
--delete--delete会删除 S3 端存在但本地不存在的对象,适合“镜像同步”,但风险较高。若不确认目标前缀是否只用于本次同步,请不要加。 -
路径与斜杠的含义
- 源路径写到具体目录:
G:\awss3\profile - 目标路径通常以
/结尾:.../common/profile/有利于明确前缀是目录语义。
- 源路径写到具体目录:
-
权限要求
- 至少需要对目标桶/前缀具备
s3:PutObject - 验证/列举通常需要
s3:ListBucket
- 至少需要对目标桶/前缀具备
8. 总结
使用以下命令即可在 Windows 上将本地目录完整同步到 S3,并保持目录结构不变:
aws s3 sync "G:\awss3\profile" "s3://bucket-name/common/profile/" --only-show-errors其优势在于:
- 递归同步、保持目录结构
- 可重复执行,适合断网或中断后的恢复
- 增量上传,仅传变化/缺失文件,效率较高
- 输出简洁,适合大量小文件场景
如需进一步提升稳定性与速度,可在网络条件较差或文件更多时再结合 CLI 的重试模式与并发参数进行优化。