介绍
组织好单个对象后,下一步是发布持续变化的文件集合。你将同步每日报表,区分增量传输和镜像同步,并在保留独立归档的同时删除过时的报表。
请先完成 使用对象键和元数据组织文档,掌握其中的存储桶、对象键、前缀和下载概念。这个全新 VM 提供 CLI 连接、本地报表和一个只包含归档的存储桶。使用 Terminal 执行命令,并在上方的 AWS View观察变化。
认证考点
| 认证 | 考点 | 本实验练习 |
|---|---|---|
| Cloud Practitioner (CLF-C02) | 任务 3.6 | S3 目录同步与限定范围的删除。 |
| Solutions Architect – Associate (SAA-C03) | 任务 3.1 | S3 目录同步与限定范围的删除。 |
| Developer – Associate (DVA-C02) | 任务 1.3 | S3 目录同步与限定范围的删除。 |
实验概览

发布已准备好的报表目录
在本步骤中,你将把两份本地报表发布到 daily/ 前缀,并理解文件名如何映射为对象键。
使用 cd(更改目录)进入工作目录:
cd /home/labex/project
使用 ls 查看已准备好的报表目录,它会列出本地文件名:
ls reports
列表包含 monday.csv 和 tuesday.csv。两者都是 CSV 文件:标题行给出列名,逗号分隔每条记录中的值。使用打印文件内容的 cat 查看星期一报表:
cat reports/monday.csv
date,orders
2026-09-28,120
列出已准备好的存储桶。对于 S3 位置,--recursive 显示整个桶中的完整对象键:
aws s3 ls s3://labex-report-delivery/ --recursive
只有 archive/retention.txt 存在。归档属于独立的工作流程,必须在每日同步后保留。
aws s3 sync 依次接收源和目标。它会递归检查源目录中的文件;sync 不需要 --recursive。每个相对文件名都会成为目标前缀下的对象键。因此,reports/monday.csv 会成为 daily/monday.csv,而不是 daily/reports/monday.csv。
aws s3 sync reports/ s3://labex-report-delivery/daily/
命令报告星期一和星期二报表的上传;输出顺序可能不同。再次列出整个桶:
aws s3 ls s3://labex-report-delivery/ --recursive
你应找到三个对象键:archive/retention.txt、daily/monday.csv 和 daily/tuesday.csv。AWS View 显示相同的对象。点击 daily/monday.csv,读取已存储的两行 CSV 报表。归档位于你选定的 daily/ 目标范围之外。
同步修改和新报表
在本步骤中,你将更新一份报表、添加另一份报表,并传输这些变化,而不再次上传未变的报表。
当源和目标都没有变化时,可以安全地使用相同源和目标运行 sync:
aws s3 sync reports/ s3://labex-report-delivery/daily/
已有文件均为最新时,没有上传行。对于本地到 S3 的传输,CLI 会检查目标对象键是否缺失、大小是否不同,或者本地文件的修改时间是否更新。它不会持续监视目录:想要发布修改时,你需要运行 sync。
向星期一报表添加一批迟到的 25 个订单。printf 打印引号中的文本;\n 结束该行。Shell 的 >> 向本地文件追加内容,而不是替换内容:
printf '2026-09-28,25\n' >> reports/monday.csv
查看三行结果:
cat reports/monday.csv
date,orders
2026-09-28,120
2026-09-28,25
创建星期三报表。这里的 > 写入新文件,替换该路径已有的任何内容:
printf 'date,orders\n2026-09-30,150\n' > reports/wednesday.csv
发布前,存储的星期一报表仍为两行,AWS View 中还没有星期三报表。只修改本地文件不会改变 S3。
再次发布:
aws s3 sync reports/ s3://labex-report-delivery/daily/
你应看到已修改的星期一报表和新建星期三报表的上传。星期二报表没有变化,因此不会上传。这是增量传输:复制变化,而不是不加区分地复制每个文件。
在 AWS View 中,星期一报表现在显示迟到的订单批次,星期三报表也已出现。将星期一报表下载到独立的本地路径,以便比较实际存储的内容:
aws s3 cp s3://labex-report-delivery/daily/monday.csv retrieved-monday.csv
cmp 逐字节比较文件。内容一致时,它成功退出,不打印差异。&& 只在比较成功后打印消息:
cmp reports/monday.csv retrieved-monday.csv && echo 'Updated report matches'
Updated report matches
这确认更新已到达存储;仅凭命令成功消息,无法判断存储的是哪些字节。

只对每日前缀进行镜像同步
在本步骤中,你将删除过时的目标报表,同时保护无关归档。
sync 的目标是 daily/;archive/ 位于该范围之外。

星期二报表已不属于发布的每日报表集合。使用 rm(删除)只删除这个本地文件。这是本地文件系统命令,因此不会删除 S3 对象:
rm reports/tuesday.csv
再次运行普通 sync:
aws s3 sync reports/ s3://labex-report-delivery/daily/
列出目标前缀:
aws s3 ls s3://labex-report-delivery/daily/ --recursive
星期二报表仍然存在。默认情况下,sync 复制缺失或更新的文件,但保留目标中的额外对象。只删除源文件不会删除它的存储副本。
镜像同步(mirror)让目标文件集合与源保持一致,包括删除。--delete 删除没有匹配源文件的目标对象键。先与 --dryrun 配合,显示计划操作但不执行:
aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete --dryrun
预演应只列出删除 daily/tuesday.csv。星期一和星期三报表与源一致,archive/retention.txt 位于 daily/ 之外。请保持目标前缀准确:使用桶根路径会将归档纳入操作范围。
检查计划删除操作后,去掉 --dryrun,运行相同操作:
aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete
命令报告星期二报表已删除。查看整个桶,以便同时检查消失和保留的内容:
aws s3 ls s3://labex-report-delivery/ --recursive
剩余对象键为 daily/monday.csv、daily/wednesday.csv 和 archive/retention.txt。在 AWS View 中打开归档对象,确认它仍显示 Keep the archive outside daily synchronization.。镜像同步只影响选定前缀。
总结
你用 sync 发布变化的报表目录,验证存储中的更新,并在使用 --delete 前预览镜像操作。最终 daily/ 集合包含星期一和星期三的报表;独立归档保持不变。发布前应确认传输方向和目标范围。
进一步阅读 AWS 官方资料:S3 sync 的传输选择、预览与删除范围.



