2.9 KiB
2.9 KiB
Drive 文件夹比较与同步
仅用于本地目录与钉盘普通文件夹之间的递归文件级比较或镜像。单个文件使用根 Skill 的 +download/+upload。
选择入口
| 目标 | 唯一入口 |
|---|---|
| 只比较,不写任何一侧 | dws drive status |
| 钉盘 → 本地 | dws drive pull |
| 本地 → 钉盘 | dws drive push |
| 两侧互相补齐 | dws drive sync |
四个入口都要求 --local-folder <绝对路径> --remote-folder <dentryUuid>;--space-id 可选。动作已经明确时直接进入对应命令,不先重复执行 status。
安全流程
status 只读,可直接执行。pull/push/sync 会写本地或钉盘,先使用相同参数 --dry-run 查看计划;确认目标、方向和冲突策略后,再按 Runtime confirmation 执行。
dws drive status --local-folder /abs/local --remote-folder <folderId> --format json
dws drive pull --local-folder /abs/local --remote-folder <folderId> --if-exists skip --dry-run --format json
dws drive push --local-folder /abs/local --remote-folder <folderId> --if-exists skip --dry-run --format json
dws drive sync --local-folder /abs/local --remote-folder <folderId> --on-conflict skip --dry-run --format json
策略
- pull/push
--if-exists:skip是不覆盖的安全默认;smart按修改时间做增量;overwrite以来源侧覆盖目标侧。用户未明确选择覆盖策略时,Agent 必须保留skip,不得代选smart/overwrite;只有回显 dry-run 的覆盖项并得到明确授权后,才使用后两者。 - sync
--on-conflict:skip默认保留两侧;remote-wins覆盖本地;local-wins覆盖远端;keep-both先改名本地再拉远端;ask需要交互。 - 默认 exact 通过 MD5 比较;远端缺少可靠 MD5 时进入
unknown并跳过。只有用户接受时间戳近似时才加--quick。 - 这些命令只处理普通
type=file和目录;在线文档、快捷方式不会按普通二进制同步。 - 文件级镜像只新增或覆盖,不删除任一侧多余文件。
结果与恢复
- status 检查
new_local/new_remote/modified/unchanged/unknown。 - pull/push/sync 检查 summary 与逐条 items;任何 failed/unknown 必须保留,不把部分结果称为成功。
- 下载先写临时文件再原子替换;失败时保留原目标。上传在提交前明确失败时直接返回。
push/syncRuntime 遇到commit_upload超时、连接中断、空响应或畸形响应会直接返回错误,不会自动恢复,也不能据此断言未提交;Agent 必须把该项保留为unknown,再用只读 list/inspect 按远端路径、名称和大小有限核对,无法证明时报告未知,不能直接重放可能已提交项。服务未同时提供源端与结果的可比哈希时,不虚构 checksum 验证。 - dry-run 与正式执行必须使用同一 local-folder、remote-folder、space-id 和策略;不要在确认后静默改变方向或冲突策略。