fselect:用SQL语法查找文件的开源命令行工具

在Linux下找文件,find 命令是标配,但它的参数语法对不熟悉的人来说确实不够直观。-name-type-exec 的组合,写一次忘一次是常有的事。

GitHub上的 fselect 项目用 Rust 实现了一套文件搜索方案,把文件系统查询变成了类似 SQL 的语句。项目目前获得 4,446 Star,支持 Linux、Windows、macOS 全平台。

正文顶部截图

核心设计

fselect 的语法结构可以概括为一条简化版 SQL:

fselect 字段[, 字段...] from 目录 where 条件 [group by ...] [order by ...] [limit N]

/tmp 下大于 1GB 的文件:

fselect size, path from /tmp where size gt 1g

找今天修改过的所有 jpg 图片:

fselect path, size from /home/user where name = '*.jpg' and modified = today

写过 SQL 的人几乎不需要额外学习。sizepathnamemodified 就是列名,from 指定搜索根目录,where 写过滤条件。操作符支持 gtltgteltebetween,也可以直接用 ><>=<=。字符串匹配支持 glob 通配符和 Rust 正则表达式。

超出常规文件搜索的能力

fselect 的查询能力覆盖了一些 find 难以处理的场景。

聚合统计。按扩展名统计文件组成:fselect "ext, count(*) from /tmp group by ext"。支持 MIN、MAX、AVG、SUM、COUNT 等函数,可以在搜索结果上做统计分析。

图片维度查找。按图片宽高过滤:fselect path from /home/user/photos where width gte 2000。找出所有正方形图片:fselect path from /home/user/photos where width = height

音频元数据。按 MP3 的比特率、流派、年份筛选:fselect duration, path from /home/user/music where genre = Rap and bitrate = 320 and mp3_year lt 2000

权限审计。扫描危险权限文件:fselect mode, path from /home/user where other_write or other_exec。查找 SUID 程序:fselect name from /usr/bin where suid

子查询。支持 SQL 风格的嵌套查询,在多个目录间做对比操作,语法类似 where size in (select size from /backup where ...)

归档内搜索。直接搜索 zip 压缩包内容,无需先解压。

gitignore 集成。搜索代码目录时自动跳过忽略文件:fselect size, path from /home/user/projects gitignore where name = '*.cpp'

输出格式。默认文本表格输出,可选 JSON、CSV、HTML 格式,便于管道处理。

交互模式。运行 fselect -i 进入交互式界面,实时输入查询语句查看结果。

README区域截图

跨平台安装

Rust 编写的单二进制文件,安装覆盖主流平台:

Linux 可用 cargo install fselect 编译,Arch 有 AUR 包,Debian/Ubuntu 有 deb 包,NixOS 已收录。也提供 musl 静态编译版本。

Windows 支持 winget、Chocolatey、Scoop 三种包管理器,以及预编译 zip 包。

macOS 通过 brew install fselect 或 MacPorts 安装。

适用场景和局限

日常需要写复杂 find 命令的场景,fselect 的 SQL 风格让逻辑更清晰。多目录文件对比、文件统计报告生成、按元数据筛选图片或音频,这些任务用 fselect 比传统工具更顺手。

fselect 不试图完全替代 findfind-exec 能力(对搜索结果执行操作)在 fselect 中不存在。它的定位是查询展示,不是查找并操作。两者可以互补使用。

把文件系统当作数据库来查询,这个设计思路对熟悉 SQL 的开发者来说很自然,也确实填补了传统命令行工具在查询表达力上的空白。

互补使用。

把文件系统当作数据库来查询,这个设计思路对熟悉 SQL 的开发者来说很自然,也确实填补了传统命令行工具在查询表达力上的空白。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐