Joplin如何清理未使用的附件

前言

Joplin使用中的图片都在存储在附件(attachment)中,可以在菜单栏“工具”-"笔记附件"中查看和删除附件。这里有一个问题就是如果笔记删除的话,对应的附件不会同步删除,而且附件本身并没有提供引用计数或其他追踪方式,在工具中无法确定哪些可以删除。这样长时间下来就在存储许多无用的附件,虽然无用但是会一直存在resources文件夹中占用空间,其他设备同步时也会增加时间。

目前有三种解决方案。

第一种是直接从数据库删除。

Joplin的离线数据存储在database.sqlite中,可以直接检索无用附件删除。这种方法简单粗暴效果显著,但需要对数据结构有一定的了解,贸然行动可能会删错数据存在一定的风险,操作前一定要备份数据库。
如果是默认笔记本,那么位于C:\Users\daen.config\joplin-desktop\database.sqlite
如果是自己新建的笔记本,那么位于C:\Users\daen.config\joplin-desktop\profile-xxxxxx\database.sqlite

# 查询未引用的附件           
 SELECT resource_id FROM note_resources  
            WHERE is_associated = 0 and resource_id not in 
               (SELECT resource_id FROM note_resources 
                WHERE is_associated = 1) 
            ORDER BY resource_id

以查出来的154a7798c69a477aab3f77bcc3ec7845为例,查出来的是文件ID,
文件位于笔记本配置目录:C:\Users\daen.config\joplin-desktop\profile-xxxxxx\resources\154a7798c69a477aab3f77bcc3ec7845.png

第二种是导出重新导入

有人发现在导出所有笔记时,导出的笔记本文件(JEX)中不存在无用附件。由此,可以讲所有文件导出后再重新导入。这个方案在导出导入的过程中,可能造成本地和云端的同步状态异常问题,需要强制从本地上载到云端。

第三种是在第二种方案的基础上扩展

首先从 Joplin 导出文件(文件 - 全部导出 - JEX),然后通过对比 Joplin 的 Web API 得到的完整附件列表和导出文件中清理后的附件列表,得到无用附件列表,再通过 Web API 直接执行删除操作。这个方法可以规避第二种方法会出现的问题,只需要在本地清理完成后同步到云端即可。

posted @ 2026-03-25 11:18  DaenMax  阅读(39)  评论(0)    收藏  举报