局部 patch 可能覆盖他人的并发修改或替换所有匹配位置
原文依据:3 处该操作不是原子 patch:它先下载整份文件,执行 `ReplaceAll` 或正则全量替换,再整文件覆盖上传。下载与上传之间发生的修改没有并发保护,而且结果只报告命中数量,不提供具体位置。
其他人在此期间提交的内容可能被静默覆盖;过宽的文字或正则模式也可能修改文档中多个非预期位置。
文档确认 patch 会对整份 Markdown 做全量替换,并通过“下载—本地替换—整文件覆盖上传”实现。若下载后他人修改同一文件,上传可能覆盖该修改;过宽的字面或正则模式也会替换所有命中。结果只给命中数量,不能用于逐处核验。用户可要求先执行 `--dry-run`、使用精确模式,并在协作文件上避免并发编辑。
- `--content` 必须显式传入,但允许为空字符串- 未加 `--regex` 时,行为等价于对整份 Markdown 文本执行 `strings.ReplaceAll`- 加了 `--regex` 时,行为等价于对整份 Markdown 文本执行 RE2 全量替换;`--content` 里的 `$1`、`${name}` 会按 Go regexp replacement template 解释,字面 `$` 请写成 `$$`- 替换后的最终 Markdown 不能为空;如果 patch 结果是空字符串,CLI 会直接报错,不会上传空文件,因为 Drive 不支持零字节 Markdown,且空文件通常是误操作- `0` 命中时命令仍然成功返回,但不会上传新版本查看另外 2 个位置
- 该命令的内部语义是:**download -> local replace -> overwrite upload**- 它不是服务端原子 patch;如果有人在你下载后、上传前更新了同一文件,本次 patch 仍可能覆盖那次中间修改- 它不会返回详细匹配位置,只返回命中数量- `--dry-run` 会同时展示两种可能的上传路径:`upload_all`(小文件)和 `upload_prepare/upload_part/upload_finish`(大文件分片上传)# 预览底层编排lark-cli markdown +patch \ --file-token boxcnxxxx \ --pattern 'hello markdown' \ --content 'hello patched' \ --dry-run```