SQLite 扩展 + 原生 CLImacOS / Linux / Windows

把文件系统,
当作数据库。

用 SQL 查询文件。
元数据保存在文件上。

把文件夹变成 SQLite 表,或直接用 xmeta 读写文件属性。

安装 xmetacurl -fsSL https://fsmeta.eidos.space/install.sh | sh
/workspace
query.sql
SELECT id, rating, status
FROM files
WHERE is_dir = 0 AND rating >= 4
ORDER BY rating DESC;
标准 SQLite,查询你自己的文件。
查询结果3 行
评分不低于 4 的文件示例
idratingstatus
notes/launch.md5Active
design/brief.pdf5Review
research/sqlite.md4Draft
从 xattr / ADS 读取属性
一个文件夹,两种使用方式。示例输出

元数据,
与文件放在一起。

属性保存在原生扩展属性或 NTFS 备用数据流中。文件夹本身就是数据来源。

文件就是行。
查询根目录下的文件与文件夹,将需要的属性声明为有类型的列。
查询时,直接读取。
元数据在查询时读取。按相对路径查找可直接定位文件;查询文件夹时按需遍历条目。
只维护一份元数据。
CLI 和 SQL 扩展读写同一份 JSON 数据,无需维护额外索引。

SQL 或命令行,
操作同一份元数据。

用 SQLite 扩展查询整个文件夹,用 xmeta 快速读取或修改单个文件的属性。

SQLite 扩展

查询文件夹
SQLite
.load ./libfs_meta

CREATE VIRTUAL TABLE files USING fs_meta(
  root = './notes',
  fields = 'rating INTEGER, status TEXT'
);

SELECT id, rating FROM files
WHERE is_dir = 0 AND rating >= 4;
扩展参考文档

xmeta CLI

编辑文件
命令行
xmeta set note.md status=Active rating:=5

xmeta get note.md --json
# {"rating":5,"status":"Active"}

xmeta unset note.md status
xmeta get note.md rating --text
# 5
CLI 参考文档
使用限制

写入需要文件系统支持 xattr / ADS。不支持向符号链接、Windows 重解析点或具有多个硬链接的 Unix 文件写入。文件不会继承目录的属性。

一条命令,
即可开始。

安装脚本会识别系统、校验下载文件,并将 xmeta 安装到用户目录。无需安装 SQLite。

版本 v0.5.0
macOS / Linuxv0.5.0
curl -fsSL https://fsmeta.eidos.space/install.sh | sh

安装到 ~/.local/bin,再次运行同一命令即可更新。

Windows(PowerShell)
irm https://fsmeta.eidos.space/install.ps1 | iex
手动下载
Windows
x86-64 ↓

SQLite 扩展与校验和 ↗

从源码构建
git clone https://github.com/mayneyao/sqlite-fs-meta.git
cd sqlite-fs-meta
cargo install --path . --locked