josesiqueira/zotero-watch-folder
GitHub: josesiqueira/zotero-watch-folder
Zotero 8 插件,自动监控文件夹并智能导入文献、同步集合,解决手动整理效率低与重复录入问题。
Stars: 2 | Forks: 1
# zotero-watch-folder-zotero8
一个功能强大的 Zotero 8 插件,能够自动监控文件夹中的新文件,并使用元数据检索、智能整理和集合同步功能将其导入到您的 Zotero 库中。
## 功能
### 阶段一:自动导入
- **监视文件夹监控** - 自动检测指定文件夹中的新 PDF 文件
- **自动元数据检索** - 为导入的 PDF 从在线来源获取元数据
- **智能文件重命名** - 根据元数据使用可定制模式重命名文件(例如:`{firstCreator} - {year} - {title}`)
- **首次运行检测** - 配置时选择是否导入现有文件
- **导入后操作** - 选择导入后保留、删除或移动文件
- **文件类型过滤** - 配置要监控的文件类型(PDF、EPUB 等)
### 阶段二:集合同步
- **双向镜像** - 同步 Zotero 集合与磁盘上的文件夹结构
- **项目移动跟踪** - 在集合之间移动项目会更新文件夹结构
- **文件夹到集合同步** - 在磁盘上创建文件夹会创建对应的集合
- **冲突解决** - 处理同步冲突的多种策略(Zotero 优先、磁盘优先、最新优先、保留两者)
### 阶段三:高级功能
- **智能规则引擎** - 根据以下条件自动分类导入:
- 标题、作者、DOI、出版物、标签、文件名等
- 操作:添加到集合、添加标签、设置字段、跳过导入
- 支持嵌套集合路径(例如:"Research/AI/Papers")
- **重复项检测** - 使用以下方法防止重复导入:
- DOI 匹配(100% 置信度)
- ISBN 匹配(100% 置信度)
- 模糊标题匹配(可配置阈值)
- 内容哈希匹配(可选)
- **批量操作** - 库维护的批量操作:
- 使用当前命名模式重新组织所有文件
- 重试失败项目的元数据
- 将智能规则应用于现有库项目
## 系统要求
- Zotero 8.0 或更高版本
- Windows、macOS 或 Linux
## 安装
1. 从 [发布页面](../../releases) 下载最新的 `.xpi` 文件
2. 在 Zotero 中,依次点击 `工具` → `附加组件`
3. 点击齿轮图标,选择 `从文件安装附加组件...`
4. 选择下载的 `.xpi` 文件
5. 重新启动 Zotero
## 配置
安装完成后,在 `编辑` → `设置` → `监视文件夹` 中配置插件:
### 基本设置
- **启用监视文件夹** - 开启/关闭监控
- **源文件夹** - 要监控新文件的文件夹
- **目标集合** - 放置导入项目的位置(默认:"收件箱")
- **轮询间隔** - 检查新文件的频率(秒)
- **文件类型** - 要监控的扩展名列表(逗号分隔)
### 导入选项
- **导入模式** - 在 Zotero 中存储文件或链接到原始位置
- **导入后操作** - 导入后对源文件执行的操作
- **自动检索元数据** - 自动为 PDF 获取元数据
### 文件命名
- **自动重命名** - 元数据检索后重命名文件
- **重命名模式** - 新文件名的模板
- 可用变量:`{firstCreator}`、`{creators}`、`{year}`、`{title}`、`{shortTitle}`、`{DOI}`、`{itemType}`、`{publicationTitle}`
- **最大文件名长度** - 截断过长的文件名
### 重复项检测
- **启用重复检查** - 导入前检查重复项
- **按 DOI/ISBN/标题匹配** - 配置检测方法
- **标题相似度阈值** - 用于模糊标题匹配(0.0-1.0)
## 从源代码构建
```
# 克隆仓库
git clone https://github.com/josesiqueira/zotero-watch-folder-zotero8.git
cd zotero-watch-folder-zotero8
# 安装依赖
npm install
# 构建插件
npm run build
# 打包为 XPI
npm run package
# 构建 + 打包 + 上传 XPI 到匹配的 GitHub 发布标签
npm run release
```
XPI 文件将在项目根目录中创建。
## 项目结构
```
zotero-watch-folder-zotero8/
├── manifest.json # Plugin manifest for Zotero 8
├── bootstrap.js # Plugin lifecycle (startup/shutdown)
├── prefs.js # Default preference values
├── content/
│ ├── watchFolder.mjs # Main orchestration service
│ ├── fileScanner.mjs # Folder scanning logic
│ ├── fileImporter.mjs # Zotero import integration
│ ├── trackingStore.mjs # Import history tracking
│ ├── metadataRetriever.mjs # PDF metadata fetching
│ ├── fileRenamer.mjs # Template-based renaming
│ ├── firstRunHandler.mjs # Initial setup wizard
│ ├── collectionSync.mjs # Collection sync coordinator
│ ├── collectionWatcher.mjs # Zotero collection observer
│ ├── folderWatcher.mjs # Disk folder observer
│ ├── pathMapper.mjs # Path ↔ collection mapping
│ ├── syncState.mjs # Sync state persistence
│ ├── conflictResolver.mjs # Sync conflict handling
│ ├── smartRules.mjs # Rules engine
│ ├── duplicateDetector.mjs # Duplicate detection
│ ├── bulkOperations.mjs # Mass operations
│ ├── utils.mjs # Shared utilities
│ ├── preferences.xhtml # Settings UI
│ └── preferences.js # Settings logic
├── locale/
│ └── en-US/
│ └── zotero-watch-folder.ftl # Localization strings
└── build/
├── build.mjs # Build script
└── package.mjs # XPI packaging script
```
## 技术细节
本插件为 Zotero 8 构建,使用现代 Web 技术:
- **ES Modules**(`.mjs`) - 无遗留的 `.jsm` 文件
- **原生 async/await** - 无 Bluebird 承诺
- **IOUtils/PathUtils** - 现代 Mozilla 文件 API
- **Fluent Localization** - 用于 i18n 的 `.ftl` 文件
## 许可证
MIT 许可证 - 详见 [许可证文件](LICENSE)
## 贡献
欢迎贡献!请随时提交问题和拉取请求。
## 致谢
- 为 [Zotero](https://www.zotero.org/) 构建 - 用于收集、整理和引用研究的免费易用工具
标签:EPUB导入, PDF导入, SEO, Tactics, Zotero, 云计算, 元数据检索, 元数据管理, 冲突解决, 去重, 双向同步, 学术工具, 批量操作, 技术栈, 插件, 数据可视化, 文件夹监控, 文件监控, 文献管理, 智能重命名, 研究工具, 自动化导入, 自定义脚本, 规则引擎, 集合同步