# Calibre 巴别图书馆计划（四）：用 LaunchBar 检索并打开书籍

> 本文公开全文。

原文：https://utgd.net/article/20404

好读书之士，常遍求于诸平台，长此以往，其书库难免处于四分五裂，或有本地电子书，或有 PDF 扫描本，或借阅自微信、多看、亚马逊等书城。终有一日，难免忘记在各处都读了什么书。在《巴别图书馆计划（二）：批量索引 DEVONthink 书籍到 Calibre》一文中，我借助 item link（文件链接）打通了 Calibre 与本地数据库（以 DEVONthink 为例），得以点击链接直达某一本在 Calibre 书库外部的书籍。一旦凿出这番天梯石栈，随后直道大通也并非难事。

而在《巴别图书馆计划（三）：批量索引任意书籍到 Calibre》中，Calibre 的“馆外藏书”更是拓展到电脑上的几乎任何文件夹，如有必要，你甚至可以把移动硬盘上的书籍信息登记到 Calibre 中。至此，Calibre 已然成为一间超大型藏书馆，即便书籍源文件不在其中，它也可以给出直达链接；不过，正是因为 Calibre 量级之重，每次搜索都要先等待软件加载完毕，实难让人忍受，有如在图书馆问询台前排队等候。应当设计一款轻巧的 Calibre 书库检索工具，并且直接在对应软件中打开书籍；这就像一旦有了在线查询系统，便鲜有人还愿意跑到图书馆麻烦管理员（最麻烦的，当然是亲自跑一趟图书馆了）。

本文将介绍一套基于 LaunchBar 的 Calibre 书库查询系统，可在任何界面中搜索书籍，免去频频开启 Calibre 软件之苦：

- 如果书籍在 Calibre 库中，则直接使用 Calibre 内置阅读器中打开；

- 若是在 DEVONthink 中，则使用 DEVONthink 阅读书籍；

- 如果在外部文件夹，则用默认阅读器打开（可自行修改）；

- 在线书城中的图书，直接打开对应页面。

\>\>LaunchBar 动作下载\<\<

## 动作使用

Credit：“使用启动器检索 Calibre”的思路来自 涔E，他设计了一款在 Alfred 中查询 Calibre 书籍的动作。处理 Calibre 数据库部分的代码部分直接来自于他。

本文动作只需修改 DEVONthink item link\[^截图中将 item link 称作“UUID”，这个称呼诚然不严谨，但在 DEVONthink 中，毕竟 UUID 是 item link 的核心部分，故以此代彼\]所属 Column 名即可使用（即图中的 UUID，Universally Unique Identifier，通用唯一识别符）。阅读本文时，默认读者已经通过自定义 Column 之方法嵌入了 DEVONthink item link（具体方法请参阅《巴别图书馆计划（一）：为什么，以及如何用 Calibre 统一管理书籍》一文）。

### 快速配置

修改脚本请前往 LaunchBar 动作编辑器（开启方式为快捷键 ‌⌥Option\-⌘Command\-E），点击“Scripts\-Edit”。

由于所涉 UUID Column 为用户自行设置，故在不同电脑中命名可能有异，例如某君除此之外再无其他自定义操作，则该 Column 就会被 Calibre 命名为 custom\_column\_1；若是已经有过自定义历史，则新创建的 Column 会紧随其后。最保险的方法是开启终端，键入以下命令以便查看各自定义 Column 的编号：

```
calibredb custom_columns
```

在上图中，我所使用电脑中的 UUID Column 编号为 \(3\)，故其对应的位置为 custom\_column\_3；如果你和我情况相同，自然不用任何改动；如果有异，则需前往动作脚本编辑页面，将脚本中的 custom\_column\_3 替换为你所查询到的结果。除此之外，一般无需对脚本做任何改动。

### 检索书库

配置完毕后，即可在 LaunchBar 中使用本文动作。找到“Calibre Database”动作后，按下空格键以输入关键词，随后即可实时看到搜索结果，各项结果的副标题为书籍格式、出版社和作者的搜索结果，如果书籍来自 DEVONthink 等外部书库，本动作也会在格式部分做出标记，以便和 Calibre 内部书籍区分。

在搜索结果中，所有 Calibre 和 DEVONthink 中的书籍都可以直接打开（至于其他平台，请参考本文“一隅三反”部分）。此处举一个用例：同一本书可能存有多个版本，例如在 Calibre 中存一份 EPUB 电子书、用于日常阅读，而 DEVONthink 中则保留扫描版本，虽远不如 EPUB 清晰，引用时却全靠它提供准确页码；借用 LaunchBar，就可以一次性找到两个版本，视当前需要，打开所需格式。

小技巧：使用通配符搜索。本文脚本导入了 SQL（Structured Query Language，结构化查询语言）相关模块，因而也可以使用 SQL 通配符 进行搜索。通配符可以代替部分关键词，例如 % 就表示任何文字，含有该通配符的关键词组合 刑法%解释 就表示含有“刑法解释”的书籍，或同时有“刑法”和“解释”的书本。

总之，借助 LaunchBar，Calibre 书库和导入 Calibre 的 DEVONthink 书籍都能一以贯之。在没有这套书籍链接&搜索系统之前，我总是需要先在 DEVONthink 中翻找一番，再去 Calibre 看看有没有漏网之鱼，踏破铁鞋才发现最初在 DEVONthink 中搜索语法有误\[^DEVONthink 搜索中文仍然很不可靠，并且对常见逻辑符号兼容不佳\]。这些辛苦，至少以后不必重蹈。

## 条分缕析

更快地检索本地数据库，这一话题向来是深度用户们所探索的前沿地带。几年前，涔E君和我不约而同，各自设计了一套 DEVONthink 检索系统（这个 是他的，这个 是我的），但碍于 Spotlight 索引机制本身所限，效果都不算理想（Spotlight 索引很容易崩，搜不到文件）。

一口气吃下整个 DEVONthink，似乎遥遥无期；不过，起码书籍属于 DEVONthink 和 Calibre 的交集，这部分数据完全可以取道 Calibre，再通过 item link 在 DEVONthink 中开启，既享 Calibre 统一馆藏、秩序井然，又获 DEVONthink 阅读批注之便。正巧的是，涔E也研究了 Calibre 的快速检索方法，我们又在另一个检索话题上不谋而合；最后，Hum 又往这口魔法锅里投了 UUID 这颗啤酒花\[^再次澄清，UUID 是 DEVONthink item link 的核心部分\]，终于酿出了 Calibre x DEVONthink 综合书籍检索系统。

站在 Calibre 的角度看，我们所做的事，其实是每一个图书管理员的日常工作：编制书目列表，通过它按图索骥。但凡管理妥当，每一本 Calibre 中的书籍都应当有作者、出版社和出版时间等信息，当然我们还可以添加评级、标签和注释等自定义信息，也包括给没有库内文件的书籍添加外部链接——例如 DEVONthink 链接。最终，LaunchBar 将这些信息从 Calibre 数据库中抽出来，择出最重要的几项，列成搜索结果列表，整个过程绝类使用一款馆藏查询系统。

相比一般的馆藏查询工具，本文动作进步之处在于，其所依托的 Calibre 毕竟收录了大量书籍源文件、并且通过自定义链接关联了外部书籍，因而不仅能查询书籍，还能直接打开阅读。

由于 LaunchBar 展示空间有限，并不能把书籍的所有信息一一罗列，本文动作只选取关键信息。有代码能力的读者可以对动作展示效果做出更多调整，如有需要，可用数据库浏览工具（例如免费的 DB Browser）检查 Calibre 数据库结构，从而从中抽取所需数据，组合出理想的呈现样式。Calibre 数据库文件路径与浏览效果如下：

```
/Users/你的用户名/Calibre Library/metadata.db
```

## 一隅三反

本文从 DEVONthink 切入，只是贪工作量小，实际上，还有大量位于其他地方的图书，它们也可以用 Calibre 检索并打开。

### 微信等在线平台的图书

好读书者，不乏同时在微信读书、亚马逊和 Readmoo 等平台购书、借书者。凡举能够获得链接的书籍，均能通过自定义 Column 实现统一搜索、一键打开\[^这种情况，当然是在网页中打开\]，即便是在线购买或借阅的书籍也不例外。本节以微信读书为例。

本文所提供的 LaunchBar 动作由两个部分协同工作，主脚本用于检索，副脚本 open\.sh 则用于打开书籍。

默认的副脚本只识别 Calibre 本地书籍和 DEVONthink 链接，现在来添加一项功能：自动识别、打开微信读书链接。请将下方代码插入原脚本 else 一行之前：

```
elif [[ "$@" =~ "weread.qq.com" ]]; then
    open "$@"
```

上述代码用于检测 Calibre 中的书籍链接是否包含 weread\.qq\.com 字段，如果包含，通常就是微信读书的链接（毕竟 Calibre 里的链接来自用户添加，不容易闹乌龙），就在浏览器中打开。其他书城的读者也可以依样画葫，检查一下你所用平台的链接特点，将 weread\.qq\.com 替换为你所用书城的前缀。

网页链接默认会用系统浏览器开启，如果要指定使用 Chrome 等第三方浏览器，可以使用以下代码：

```
open -a "把你的 Chrome 浏览器拖到这里以获得其路径" "$@"
```

### 外置文件夹中的 PDF

即便我重度使用 DEVONthink，也有大量参考书并未置于其中，而是径直存于外部文件夹，例如一些业余爱好方面的图书，远不到用动用 DEVONthink 将其嚼烂吃透的地步，但同时也需要统一管理，故同样纳入 Calibre，方法与打开在线图书如出一辙，本质上就像在修改一份通讯录。

```
elif [[ "$@" =~ "file:///" ]]; then
    open "${@/file:\/\//}" -a "/System/Applications/Preview.app"
```

以上代码，将调用原生预览工具（Preview\.app）打开目标书籍，您也可以将其更换为 PDF Expert 等第三方 PDF 阅读器。

凡此种种拓展功用，全凭读者自己想象；建立一栋综合性私人藏书馆的计划，已然蓝图初现。

---

[前往标准阅读页](https://utgd.net/article/20404?audience=web)
