飞书知识库文档批量上传指南
1729 words
9 minutes
飞书知识库文档批量上传指南
飞书知识库文档批量上传指南
🗂️ 基于三次实战经验沉淀(岗位资料47篇、面经47篇、经验贴44篇) 📅 更新于 2026-06-27 🎯 目标:快速、稳定地将本地 Markdown 文件批量上传至飞书知识库
一、整体流程概览
1️⃣ 创建知识库节点 → 2️⃣ 复制文件到工作目录 → 3️⃣ 批量上传为飞书文档 → 4️⃣ 更新索引文档二、前置准备
2.1 查看知识库空间 ID
lark-cli wiki +space-list输出中找到目标知识库的 space_id,例如:
我的知识库 → space_id: 76558787601215026742.2 查看知识库根节点
lark-cli wiki +node-list --space-id "<space_id>"返回的 nodes 列表中,根目录下的节点会显示 parent_node_token 为根节点 token。
三、创建知识库节点
3.1 创建分类节点(origin 类型)
lark-cli wiki +node-create \ --space-id "7655878760121502674" \ --title "面经" \ --node-type "origin" \ --obj-type "docx"参数说明:
--node-type origin:创建文件夹类型节点(可包含子文档)--obj-type docx:节点关联的默认文档类型
返回示例:
{ "ok": true, "data": { "node_token": "Gs8TwCHdiiv75wkYQUJcgWyHnGg", "title": "面经", "url": "https://my.feishu.cn/wiki/Gs8TwCHdiiv75wkYQUJcgWyHnGg" }}⚠️ 保存好
node_token! 后续上传文档时要用作--parent-token。
四、文件准备
4.1 复制文件到可访问目录
飞书 CLI 的 --content @file 必须使用相对路径,不能直接使用 Android 绝对路径。
# 创建临时工作目录mkdir -p /home/mianjing
# 复制所有 .md 文件过去cp /storage/emulated/0/小万工作间/面经/*.md /home/mianjing/4.2 确认文件完整性
ls /home/mianjing/*.md | wc -l# 输出文件总数五、批量上传文档
5.1 核心命令
cd /home/mianjing
lark-cli docs +create \ --doc-format markdown \ --parent-token "<node_token>" \ --title "文档标题" \ --content "@./文件名.md"关键参数:
--doc-format markdown:以 Markdown 格式导入(本地 .md 文件直接用这个)--parent-token:目标知识库节点的 token(步骤三中返回的)--content @./xxx.md:相对路径!相对路径!相对路径!
5.2 ⚠️ 踩坑记录:文件路径问题
# ❌ 错误写法——CLI 会报 invalid file path--content @/storage/emulated/0/小万工作间/面经/xxx.md
# ✅ 正确写法——cd 到文件所在目录后用相对路径cd /home/mianjing--content @./xxx.md错误信息:
--content: invalid file path "xxx": --file must be a relative pathwithin the current directory5.3 批量上传脚本模板
cd /home/mianjing
for f in *.md; do title="${f%.md}" echo "🔄 $title"
result=$(lark-cli docs +create \ --doc-format markdown \ --parent-token "<node_token>" \ --title "$title" \ --content "@./$f" 2>&1)
if echo "$result" | grep -q '"ok": true'; then echo " ✅ 成功" else echo " ⏳ 限流,等待重试..." sleep 8 result=$(lark-cli docs +create \ --doc-format markdown \ --parent-token "<node_token>" \ --title "$title" \ --content "@./$f" 2>&1) if echo "$result" | grep -q '"ok": true'; then echo " ✅ 重试成功" else echo " ❌ 失败" fi fi
sleep 2 # 间隔请求,避免限流done5.4 ⚠️ 踩坑记录:API 限流
现象: 连续上传约 10 个文件后,所有请求返回 rate_limit 错误。
解决方案:
- 每上传一个文件后
sleep 2 - 限流后等待 8-10 秒 再重试
- 重试成功率接近 100%
- 宁可慢一点,不要并发上传(会全部限流)
六、验证上传结果
6.1 查看节点下文档列表
lark-cli wiki +node-list \ --space-id "7655878760121502674" \ --parent-node-token "<node_token>"6.2 对比本地文件和已上传文件
import subprocess, json, re, os
# 获取已上传的r = subprocess.run(["lark-cli", "wiki", "+node-list", "--space-id", "7655878760121502674", "--parent-node-token", "<node_token>"], capture_output=True, text=True, timeout=15)raw = r.stdoutm = re.search(r'\{.*', raw, re.DOTALL)data = json.loads(m.group())uploaded = set(n['title'] for n in data['data']['nodes'])
# 本地文件local = set(f[:-3] for f in os.listdir("/home/mianjing") if f.endswith('.md'))
missing = local - uploadedprint(f"已上传: {len(uploaded)}")print(f"本地: {len(local)}")print(f"未同步: {len(missing)}")for p in sorted(missing): print(f" ⏳ {p}")6.3 ⚠️ 踩坑记录:node-list 数据结构
lark-cli wiki +node-list 返回的 JSON 结构是:
{ "ok": true, "data": { "has_more": false, "nodes": [ { "node_token": "xxx", "title": "文档标题", "node_type": "origin" } ], "page_token": "..." }}注意: 记录在 data.nodes 里,不是 data.records 或 data.data。
七、更新索引文档
7.1 获取当前索引文档内容
lark-cli docs +fetch \ --doc "<doc_token>" \ --doc-format markdown返回的 JSON 中,内容在 data.document.content。
注意 revision_id: 每次更新后 revision 会递增,更新时需要传入最新的 revision。
7.2 获取节点下所有文档的链接
import subprocess, json, re
# 处理分页all_nodes = []page_token = Nonewhile True: cmd = ["lark-cli", "wiki", "+node-list", "--space-id", "7655878760121502674", "--parent-node-token", "<node_token>"] if page_token: cmd += ["--page-token", page_token]
r = subprocess.run(cmd, capture_output=True, text=True, timeout=15) raw = r.stdout m = re.search(r'\{.*', raw, re.DOTALL) data = json.loads(m.group()) all_nodes.extend(data['data']['nodes'])
if data['data'].get('has_more') and data['data'].get('page_token'): page_token = data['data']['page_token'] else: break
# 文档链接格式:https://my.feishu.cn/wiki/<node_token>for n in sorted(all_nodes, key=lambda x: x['title']): print(f"- [{n['title']}](https://my.feishu.cn/wiki/{n['node_token']})")7.3 覆盖更新索引文档
lark-cli docs +update \ --doc "<doc_token>" \ --command overwrite \ --doc-format markdown \ --content "<完整的新文档内容>" \ --revision-id <latest_revision>7.4 ⚠️ 踩坑记录:overwrite vs str_replace
overwrite:用--content完全替换文档内容。适合大段增删改。str_replace:替换文档中的指定文本。适合小范围修改(如更新篇数)。replace_all❌ 不存在这个命令! 会报invalid value "replace_all"。
更新文档总数的示例:
# 先找到文档中的旧数字,用 str_replace 精准替换lark-cli docs +update \ --doc "<doc_token>" \ --command str_replace \ --pattern "🗂️ 共 73 篇文档" \ --content "🗂️ 共 120 篇文档" \ --revision-id <rev>八、最佳实践总结
8.1 建议的上传节奏
| 批次 | 文件数 | 间隔 | 预计耗时 |
|---|---|---|---|
| 第一批(热身) | 5 个 | 2 秒 | ~15s |
| 第二批 | 10 个 | 2 秒 | ~25s |
| 第三批及以后 | 每次 10-15 个 | 2-3 秒 | ~1min/批 |
| 限流后重试 | 等待 8-10 秒 | - | - |
40-50 个文件的总耗时约 5-8 分钟。
8.2 批量操作流程速查
# 1. 创建节点lark-cli wiki +node-create --space-id "xxx" --title "节点名" --node-type origin --obj-type docx
# 2. 复制文件mkdir -p /home/temp && cp /storage/emulated/0/小万工作间/xxx/*.md /home/temp/
# 3. 批量上传(cd 到目录后用 for 循环)cd /home/temp && for f in *.md; do ... done
# 4. 验证lark-cli wiki +node-list --space-id "xxx" --parent-node-token "xxx" | python3 -c "..."
# 5. 更新索引lark-cli docs +update --doc "xxx" --command overwrite --doc-format markdown --content "..." --revision-id x8.3 坑点速查表
| 坑 | 表现 | 解决 |
|---|---|---|
--content @file 路径错误 | invalid file path | 用相对路径,先 cd 到目录 |
| API 限流 | rate_limit 错误 | 每文件间隔 2s,限流后等 8-10s 重试 |
node-list 数据路径 | KeyError: 'records' | 记录在 data.nodes 里 |
replace_all 不存在 | invalid value | 用 overwrite 或 str_replace |
| 索引 revision 过期 | 更新失败 | 先 fetch 获取最新 revision |
| 仪表盘统计卡片 | ”数据加载失败” | 配置正确但客户端渲染卡顿,刷新即可 |
九、常用命令速查
# 知识库操作lark-cli wiki +space-list # 列出知识库空间lark-cli wiki +node-list --space-id "xxx" # 列出根节点lark-cli wiki +node-list --space-id "xxx" --parent-node-token "xxx" # 列出子节点lark-cli wiki +node-create --space-id "xxx" --title "xx" --node-type origin --obj-type docx # 创建节点
# 文档操作lark-cli docs +create --doc-format markdown --parent-token "xxx" --title "xx" --content @./xx.md # 创建文档lark-cli docs +fetch --doc "xxx" --doc-format markdown # 获取文档内容lark-cli docs +update --doc "xxx" --command overwrite --doc-format markdown --content "..." --revision-id x # 更新文档
# 多维表格操作lark-cli base +field-list --base-token "xxx" --table-id "xxx" # 列出字段lark-cli base +record-list --base-token "xxx" --table-id "xxx" --format json # 列出记录lark-cli base +record-upsert --base-token "xxx" --table-id "xxx" --record-id "xxx" --json '{"字段":"值"}' # 更新单条lark-cli base +record-batch-update --base-token "xxx" --table-id "xxx" --json @./file.json # 批量更新💡 核心原则: 耐心比速度重要——每次间隔几秒,限流了等一会再重试,反而比盲目快冲更快完成全部上传。
Share Article
If this article helped you, please share it with others!
飞书知识库文档批量上传指南
https://estars-blog.pages.dev/posts/操作指南-飞书知识库文档批量上传指南/ Related Posts Smart
1
🖼️ 小红书图片下载指南
操作指南 用桌面版 UA 访问小红书分享链接:
2
🎬 小红书视频下载指南
操作指南 用桌面版UA访问小红书分享链接,获取完整HTML:
3
Karpathy知识库方法论
航海图 AI相关
4
DS2API 部署使用指南
航海图 # ds2api 部署使用指南 > 将 DeepSeek Web 对话能力转换为 OpenAI、Claude、Gemini 兼容 API 的中间件。 > 项目地址:https://github.com/CJackHwang/ds2api (
5
抓取 linux.do(LINUX DO)帖子指南
航海图 linux.do 是 Discourse 论坛,部署在 Cloudflare 后面。直接用 curl 访问会返回 403,浏览器打开也会卡在 Just a moment... 验证页。
Random Posts Random