把飞书云盘挂载到 Linux:feishu-dav

介绍

飞书(Lark)在国内团队协作里用得不少,云盘里堆满了共享的文档、表格和归档文件。但飞书官方并没有提供 Linux 下的同步盘客户端,想在 Linux 上方便地访问云盘文件,往往只能网页版手动下载,或者调用开放平台 API 自己写脚本——都很别扭。

feishu-dav 就是为了解决这个问题:它把飞书云盘通过 WebDAV 协议暴露成本地 HTTP 服务,再用 rclone mount 挂载成一个本地目录。之后你就可以像操作普通文件夹一样浏览、读取、上传飞书云盘里的文件了。

整个项目只有一个 Python 文件 feishu_dav.py,依赖也很少:

pip install wsgidav cheroot requests

设计思路

feishu-dav 的核心是两层转换:

选择 WebDAV 而不是自己发明一个 FUSE 文件系统,好处是 rclone 已经把挂载、缓存、断点续传这些脏活都做好了,feishu-dav 只需要把协议翻译对即可,实现因此可以保持在一千行上下的单文件里。

快速上手

安装依赖后,一条命令自动引导:

python feishu_dav.py --init

引导流程参考了 larkfs init 的风格:

  1. 检查应用凭证:依次尝试命令行参数 → 环境变量 FEISHU_APP_ID/FEISHU_APP_SECRET → 最后交互式输入(会给出在开发者后台创建应用的指引)
  2. 自动打开浏览器完成 OAuth 授权(本地回调 127.0.0.1:8577)
  3. 验证云盘访问权限并保存配置到 ~/.feishu-dav/config.json(权限 600,含 token,注意不要外传)

授权采用 OAuth Device Flow(RFC 8628),这是个很贴心的设计:不需要在开放平台配置重定向 URL。SSH 到服务器上操作时加 --no-browser,只打印授权链接,复制到本机浏览器或手机飞书扫码打开即可。

非交互场景(CI / 脚本)也支持:

python feishu_dav.py --init \
  --app-id cli_xxx --app-secret xxx \
  --mount Shared:xxxx --read-only

初始化完成后启动服务:

python feishu_dav.py              # 默认 127.0.0.1:8765
python feishu_dav.py --doctor     # 自检配置/凭证/挂载点,给出修复建议

用 rclone 挂载

rclone config create feishu webdav url=http://127.0.0.1:8765 vendor=other
mkdir -p ~/feishu
rclone mount feishu: ~/feishu --exclude "~.*" --dir-cache-time 3s --vfs-cache-mode off --daemon

这几个参数都有讲究:

之后 ls ~/feishu 就能看到云盘内容了。不挂载也可以直接用 rclone lsf feishu: 浏览,或者任何 WebDAV 客户端连接。

一些实用细节

踩过的坑

小结

feishu-dav 是一个典型的「用胶水解决实际问题」的小工具:WebDAV + rclone 这套组合是现成的,飞书开放平台 API 是现成的,缺的只是中间那一层协议翻译。单文件实现、--init 一条命令完成引导、--doctor 自检,上手成本很低。如果你在 Linux 上工作而又离不开飞书云盘,值得一试。