# 巴别图书馆计划（二）：批量索引 DEVONthink 书籍到 Calibre

> 本文公开全文。

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

经过 《巴别图书馆计划（一）》 的讨论，Calibre 与 DEVONthink 这两大数据库之间的藩篱，已经通过文件链接 item link 得以翻越，嗜好阅读之人，终得在 Calibre 统一管理、搜索读过的所有书籍。

不过，这套方法有赖于将 DEVONthink item link 索引到 Calibre，手动操作难免令人不悦，读者越是嗜书如命、其 DEVONthink 数据库越是汗牛充栋，此刻的整理工作越是近乎愚公移山。

在初次凿通 Calibre 和 DEVONthink 之后，我并未立即开始一锄一铲地创建链接，而是继续磨刀晒网，设计了本文的批量索引脚本，既可以批量索引现有书籍，也能够每次添加新书都自动索引。可惜 Calibre 不允许同时运行脚本和 Calibre 主程序，故无法用动图或视频直观显示添加过程。

- AppleScript 脚本下载

- DEVONthink 规则下载（GitHub）

## 动作使用

本文脚本用 AppleScript 写成，可以直接用系统自带脚本编辑器打开，不做任何修改即可运行，也可以嵌入 Automator、LaunchBar、Alfred、Keyboard Maestro 乃至 Shortcuts 等主流自动化工具中，免去手动建立链接的苦差；有志者还可以结合 DEVONthink 自动化，从而每逢新书入库，就自动在 Calibre 中生成条目。无论以何种方式索引，本文都可以在 Calibre 中创建带有链接的书籍条目，点击即可跳到对应的 DEVONthink 文件。

在批量索引或自动索引之前，你需要先在 Calibre 中创建一个自定义的栏目（column），在此存放 DEVONthink 的 item link。方法是：在 Calibre 的设置中，找到“Preferences \- Add your own columns”，点击“Add custom column”以创建新的栏目，并将其命名为 uuid——可以是别的名字，只要你记得修改自动化动作中的相应代码。紧接着，将这个栏目的格式设置为 HTML，这样得到的链接才是一个超链接，可以直接点击。

### 批量索引现有书籍

读到此文的诸位，如果正好在用 DEVONthink，估计其中都有所积累。在任何涉及跨应用协作的话题中，“数据迁移”都是那个阿喀琉斯之踵，只要稍微想想迁移之辛苦，任何好工具、好方法或好流程都要黯淡几分。

我当然也不乐意手动搬运数据。为此，下面这个 AppleScript 脚本就应运而生，你只需打开 DEVONthink，选中需要索引到 Calibre 的书籍，随后在系统脚本编辑器（或其他你喜欢的自动化工具）中运行本文脚本即可。

索引后的书籍都会以文件名为书名，同时已经附上了 DEVONthink item link，此时已经可以点击链接打开这些书籍。

### 自动索引新书

书籍信息的同步并不能一劳永逸。常常四处搜罗新书的读者大概懂得个中辛苦：新入库的书籍，可能一时匆忙忘了添加到 Calibre，事后还得对照一下 DEVONthink 和 Calibre 中的书单，看看哪里有缺漏再补上。这种仰赖“好记性”的书籍管理，太容易丢三落四，背离了使用 Calibre 统一管理书籍——节省力气——的初衷。

因此，在解了现存书籍的燃眉之急后，不妨未雨绸缪，设计一套自动从 DEVONthink 索引书籍条目至 Calibre 的流程，让新书自动加入 Calibre。方才我们用过的脚本可以继续效力，只是这次不再依靠脚本编辑器或单独的自动化工具，而是直接使用 DEVONthink 自动化——Smart Rules。

如上图所示，这一规则将监测所有 Inbox 收件箱中的 PDF 文件，并将其信息索引到 Calibre。索引部分所用的脚本修改自其前一节，你无需再做改动；如果想改变监控的文件夹，或者需要改变监控条件（比如想排除论文类 PDF，只索引书籍 PDF），可以在“Search in”开始的部分自行调整。

至于具体流程，我提供一个例子，当然诸位不需要照搬：一般来说，PDF 格式的文件既可能是书籍，也可能是论文，还包括剪藏为 PDF 格式的网页，因此最好在索引前做个分拣——书籍以外的 PDF，我们可能并不需要索引到 Calibre。相较其他格式，唯书籍可能需要 OCR 之后才能够正常复制、读取，此时有个取巧方法，就是创建一个专门的文件夹，用于存放 OCR 过的 PDF，而 DEVONthink 监控的对象也设为这个文件夹。如此一来，进入专用文件夹的都是书籍，而书籍都经过 OCR，且都会自动索引到 Calibre。

至此，我们已经通过批量索引和自动索引两套动作，实现了 DEVONthink 和 Calibre 书籍的连通。

## 条分缕析

本文所用动作，主要基于 Calibre 的命令行工具打造。Calibre 自带了 calibredb 命令，能够嵌入各家自动化工具，不打开 Calibre 即可添加各类书籍信息。本文动作就用到它分别创建了书籍条目、附上了 item link。

第一条命令用于创建空书籍（empty book），相当于只创建了一个条目，但是并没有把书籍源文件存入 Calibre。这正为我们所需，因为源文件在 DEVONthink 中，只需要索引书籍信息即可，不用也不能触及源文件。该命令如下：

```
calibredb add --empty --title "书名"
```

\-\-empty 参数即表示创建空书籍，书名 部分可以自己定义，本文提供的脚本会自动获取 DEVONthink 书名并填充进去。除了通过 \-\-title 设定书名，Calibre 命令行也可以设置作者、出版社乃至出版年份等信息，不过考虑 Calibre 可以通过 ISBN 一举获得各项书籍元数据，我们就没必要再写个脚本一一设置。试着运行一下添加书籍的命令（再次提醒，使用 Calibre 命令行时需要关闭 Calibre），再打开 Calibre，即可看到刚刚入库的新书。

另一条命令用于为现有书籍添加 item link 信息。之前的命令不能添加用户自定义信息，而 item link 恰恰是我们自行创建的，所以还需要本命令填补空缺。运行完毕命令后，目标书籍就会附上 DEVONthink item link，至此即可实现点击跳转。

```
calibredb set_custom uuid 949 '链接的 HTML 代码'
```

考虑到目的是“可点击的链接”，我们得把整段带有 DEVONthink item link 的 HTML 代码加进 Calibre，方能实现点击效果。点开任意一本 Calibre 书籍的元数据页面（选中书籍后按下快捷键 E 可快速编辑元数据），可以看到其中的链接均存储为 HTML，所以在添加信息时也需要遵循这个格式。当然，这一切本文动作都已经料理完毕，诸位不必从零再捯饬一遍。

至于拼接各条命令、拼装 AppleScript 和 Shell 脚本等枝枝节节，启发性不强，并不值得在此大书特书。毕竟诸君赏光打开此文，好比来我家作客，做菜招待是分内之事，介绍几样特色食材也能活跃气氛，兴许还能鼓动宾客回家一试身手；可一旦就着烹饪话题，锅碗瓢盆、柴米油盐、炸炒炖煮说个没完，那就扫兴了。此刻读罢文章，读者若酒足饭饱，或者跃跃欲试，都足以让我额手称庆。

## 小结

系列文章开篇就表明，希望用 Calibre 统一管理尽可能所有的书籍；因此，本文方法并不是专门为 DEVONthink 设计的，只是 DEVONthink 刚好有 item link，弗需先自己造一套链接系统，于是系列文章就以其为切入。借助其他支持文件链接的软件，比如 PDF 阅读器 Skim，大概也可以用类似的思路统一索引到 Calibre。可以总结出一个经验结论：

不管你用什么阅读工具，凡举数据和软件分离，并且能够找到稳固可靠的文件链接——无论是用阅读器本身还是第三方工具——就可以由 Calibre 集中管理。

DEVONthink 固然提供了很好的现成工具，但它毕竟不是随处可买的便宜榔头，令其先行，不过是先抛出一个操作量较少的例子，方便诸位了解整个流程。在下一篇文章中，我将介绍一套更通用的方法，可以将任何文件夹中的书籍索引到 Calibre。

---

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