介绍
图书修复团队正在把 Garden Atlas 搬到新工作台。来源包含私人草稿和临时预览;接收侧已有一条不能丢失的便签。你的成果是可用的资料集和工作台清单,先完成今天的版本,再完成修订版。
你需要熟悉基本终端操作。这个独立环境提供两个本地目录和下一版快照。你将学习方向、尾斜线、预演、过滤与精确删除范围,再在下一实验中通过 SSH 应用相同思想。
演练资料目录边界
在本步骤中,你将比较两种安全预演,再把图书资料复制到接收目录。整个实验使用 Terminal,这里不需要 SSH。
修复台正在迁移 Garden Atlas。old/collection 保存正文、隐藏阅读配置和可执行阅读工具。old/generated 保存可丢弃的工作台清单。old/personal 是私有目录。新工作台已有 receiver-note.txt,它属于接收团队,每次更新都必须保留。revision/ 保存稍后使用的下一版资料。
cd 切换目录。ls -a 包含隐藏条目;cat 读取文本而不编辑。先查看接收团队的便签:
cd /home/labex/project/folder-move
ls -a old/collection
cat new/receiver-note.txt
便签写着 Received by Mira. Keep the west shelf clear.。工作台已有的旧目录并不完整。目标特意设置为非空状态。
rsync 从第一个路径复制到第二个路径。-a 表示归档模式:递归复制目录,保留修改时间、执行权限和其他受支持的属性。普通接收账户无法保留任意来源所有者;本课程检查字节与执行权限,不承诺跨系统所有权、ACL 或扩展属性。-n 表示预演,不改变文件;-i 逐项列出计划变更。
加引号的排除规则在所有深度排除名称以 .tmp 结尾的文件;引号防止 shell 在 rsync 看到模式前先展开它。
先预演来源目录本身,不加尾斜线:
rsync -ani --exclude='*.tmp' old/collection new/collection/
留意目标资料目录内将要多出的一层 collection/。这种嵌套会把阅读工具放到错误位置。
现在加上尾斜线,预演来源内容:
rsync -ani --exclude='*.tmp' old/collection/ new/collection/
这些路径现在直接位于 new/collection/ 下,包括 .bindery.conf、read-book 和 texts/。rsync 读取目录本身,因此包含点文件;使用 old/collection/* 这样的 shell 通配符则会遗漏隐藏条目。新增普通文件通常显示 >f+++++++++;其他标志描述属性变化。预演行只是计划,并不表示已经交付资料。
只移除 n,执行选定的传输:
rsync -ai --exclude='*.tmp' old/collection/ new/collection/
new/collection/read-book
阅读工具显示 reading_order=catalog,treatment,随后输出 Garden Atlas 目录和纸铰修复方法。直接执行证明复制后的工具能使用相对正文路径与隐藏配置。如果被拒绝执行,用 ls -l 检查来源和目标权限,再从准备好的来源重跑归档模式。不要用固定输出替换工具。
如果误执行了嵌套复制,先用 ls new/collection/collection 检查,再用 rm -r new/collection/collection 只删除意外重复目录。rm -r 会永久删除指定目录及其内容。绝不要把清理路径缩短为 new,其中还存放接收便签。随后重新执行正确传输。
交付工作台清单并保留便签
在本步骤中,你将复制独立的生成清单,完成首次交付。留在 /home/labex/project/folder-move 中的 Terminal。
资料集与生成文件职责不同。来源管理 generated/ 下的每个文件;接收方拥有根目录便签。只选择第二个受管目录,不要整体复制 old/,否则还会泄露 personal/。
rsync -ani old/generated/ new/generated/
rsync -ai old/generated/ new/generated/
cat new/generated/current.txt
cat new/receiver-note.txt
清单显示 Garden Atlas | desk edition 1。过时清单此时仍特意包含在第一版中。接收便签没有变化。再次运行交付的阅读工具:
new/collection/read-book
目前不需要 --delete。rsync 默认保留目标独有文件。排除规则阻止传输,却不会删除目标上已有的临时文件。如果先前误复制了预览,检查并只删除确切的多余文件,例如 rm new/collection/preview.tmp,然后重试过滤同步。绝不要为了通过检查清空接收根目录。
在受管范围内应用下一版
在本步骤中,你将交付第二版,并仅移除旧生成清单。留在同一工作区的 Terminal。
cat 接受多个文件名,并按顺序显示内容。替换可编辑来源前,先阅读提供的下一版:
cat revision/collection/texts/catalog.txt revision/collection/texts/treatment.txt revision/collection/texts/addendum.txt
目录现在有 48 页,修复方法改用亚麻铰,另有新增补充资料。cp -a 递归复制并保留文件属性。revision/. 表示所有内容,包括隐藏文件。这会把提供的变更覆盖到 old/ 中,但不会删除修订版中缺失的旧条目。工作台明确退役了 old/generated/obsolete.txt,因此只删除这一确切的来源文件。rm 会永久删除文件,不要扩大路径范围。
cp -a revision/. old/
rm old/generated/obsolete.txt
通常 rsync 根据大小和修改时间判断文件数据是否变化。-c 增加文件内容的校验和比较。这些文件很小,开销有限,也能发现时间戳未变的等长内容变化。它不会建立版本历史或备份。预演并执行资料更新:
rsync -anci --exclude='*.tmp' old/collection/ new/collection/
rsync -aci --exclude='*.tmp' old/collection/ new/collection/
资料预演应显示两份修订正文和新增补充资料,不包含临时预览。也可能显示仅属性发生变化的条目。
--delete 删除目标中来源已不存在的条目,范围是所选同步目录内部。这里只有 generated/ 完全受管,接收根目录不是。预演退役操作,留意 *deleting obsolete.txt,然后严格按相同范围执行:
rsync -anci --delete old/generated/ new/generated/
rsync -aci --delete old/generated/ new/generated/
cat new/generated/current.txt new/collection/texts/addendum.txt new/receiver-note.txt
new/collection/read-book
你应读到工作台第二版、新增页、原接收便签及更新后的阅读工具输出。在根目录使用 --delete 镜像可能抹掉便签。绝不要用这种方式移除这一份受管清单。
重复相同的预演:
rsync -anci --exclude='*.tmp' old/collection/ new/collection/
rsync -anci --delete old/generated/ new/generated/
应不再有文件变化。在这里声明的范围内重复操作是安全的,但以后来源发生删除时,仍须明确判断哪些目标目录由来源管理。仅靠 rsync 无法恢复原版;需要历史时应另做备份。
总结
你交付了可用的资料集,保留了隐藏配置、阅读工具权限和接收台便签。第二轮同步更新了受管文件,并且只在声明的范围内删除退役清单。同步具有方向性;它不是带版本历史的备份,也不会合并冲突。



