高性能本地文件搜索工具 — 文件名 + 文本内容,原生 GUI
单一二进制,无需安装,跨平台运行。搜索百万文件只需数秒,支持正则、GBK 编码、上下文行、深色/浅色主题。
前往 Releases 下载最新版本:
| 平台 | 文件 | 说明 |
|---|---|---|
| Windows | rust-seek-windows-x86_64.exe |
双击即用,无需安装 |
| macOS (Apple Silicon) | rust-seek-macos-aarch64.tar.gz |
M 系列芯片 |
| macOS (Intel) | rust-seek-macos-x86_64.tar.gz |
x86_64 |
| Linux | rust-seek-linux-x86_64.tar.gz |
x86_64 |
macOS 首次打开提示"未验证的开发者":系统设置 → 隐私与安全性 → 仍然打开
| 模式 | 说明 |
|---|---|
| 🗂 文件名 | 按文件/文件夹名搜索,支持正则,显示文件大小和类型图标 |
| 📄 文本 | 搜索文件内容,显示匹配行 + 上下文,支持 UTF-8 / GBK 双编码 |
- 并行遍历:基于
ignorecrate(ripgrep 同款),多核并行,速度与 ripgrep 相当 - 内存映射 I/O:大文件通过
memmap2零拷贝读取,不占用额外内存 - 正则支持:Rust
regexcrate,DFA 引擎,Unicode 感知 - 纯文本模式(
F):自动 escape 特殊字符,无需手写转义 - 大小写不敏感(
Aa):默认开启,随时切换 - 实时正则校验:输入时即时检测语法错误,搜索前就能发现问题
- 二进制文件跳过:自动检测并跳过二进制文件
- GBK / GB2312 支持:UTF-8 解码失败时自动回退 GBK,中文文件无乱码
- 结果上限 2000 条:超出时自动停止后台线程,提示截断
- 实时流式输出:结果边搜索边显示,无需等待完成
- 全部高亮:每行所有匹配位置均以黄色背景标出
- 上下文行:文本模式显示匹配行的前后各一行,行号绿色标注
- 折叠/展开:单个文件或全部一键折叠,超过 5 处匹配时按需展开
- 文件类型图标:⚙ 可执行、📝 代码、🖼 图片、🎬 视频、📦 压缩包等
- 结果过滤:搜索完成后在结果中二次过滤,无需重新搜索
- 一键复制全部路径:所有结果路径复制到剪贴板
- 右键菜单:打开文件、在资源管理器/Finder 中显示、复制路径/文件夹路径
- 深色/浅色主题:点击 ☀️/🌙 切换,或按
T键 - 拖拽设置路径:将文件夹拖到窗口即可设置搜索目录
- 搜索历史:路径和关键词历史跨重启保存,点击或 ↑↓ 键快速复用
- 回车搜索:无需鼠标,输入后直接回车
- Esc 取消:随时中断正在运行的搜索
- 窗口标题:实时显示搜索状态和结果数
- 自动聚焦:启动即可直接输入,无需点击
- 打开 rust-seek
- 在「路径」框输入或拖入要搜索的目录(默认为当前目录)
- 选择模式:🗂 文件名 或 📄 文本
- 输入关键词,按 Enter 或点击 🔍 搜索
- 结果实时出现,右键任意结果可打开文件或在资源管理器中定位
┌──────────────────────────────────────────────────────────────────────┐
│ 路径: [C:/project ] 📁 🗂文件名 📄文本 [fn main ] 🔍搜索 Aa F ☀️│
├──────────────────────────────────────────────────────────────────────┤
│ ▼全部展开 ▶全部折叠 📋复制全部路径 过滤: [ ] ✕ │
├──────────────────────────────────────────────────────────────────────┤
│ ▼ 📝 src/main.rs (1 处匹配) │
│ 0 mod app; │
│ 1: fn main() -> eframe::Result { │
│ 2 let options = eframe::NativeOptions { │
│ │
│ ▼ 📝 src/app.rs (3 处匹配) │
│ 40 // start search │
│ 41: fn start_search(&mut self) { │
│ 42 if self.pattern.is_empty() { return; } │
├──────────────────────────────────────────────────────────────────────┤
│ 4 处匹配,共 2 个文件 (8ms) │
└──────────────────────────────────────────────────────────────────────┘
src/
├── main.rs # 入口,窗口配置,内嵌 CJK 字体(NotoSansSC)
├── app.rs # GUI:工具栏、结果列表、历史、拖拽、右键菜单
├── searcher.rs # 核心引擎:mmap 读取、正则匹配、GBK 解码、二进制检测
└── theme.rs # 深色/浅色主题 visuals
| 组件 | Crate | 说明 |
|---|---|---|
| GUI | egui / eframe |
即时模式,原生渲染,无 Electron |
| 目录遍历 | ignore |
ripgrep 同款,并行 + gitignore 感知 |
| 文件读取 | memmap2 |
内存映射,大文件零拷贝 |
| 正则匹配 | regex |
DFA 引擎,Unicode 感知 |
| 编码检测 | encoding_rs |
UTF-8 + GBK/GB2312 回退 |
| 文件对话框 | rfd |
原生文件选择器 |
| 持久化 | serde_json |
搜索历史和偏好设置 |
- 大小写不敏感搜索 10 万文件:< 2 秒(8 核机器)
- 内存映射:10 MB 以内文件零拷贝,不全量加载进内存
- 多核线性扩展:线程数 = CPU 核心数
Arc共享上下文行:每个匹配零额外堆分配- 正则缓存:每次按键不重新编译,仅在 pattern/选项变化时重建
- 结果一次性排序:搜索完成后 O(n log n),不在插入时排序
- 过滤索引缓存:过滤结果缓存,仅在结果或过滤词变化时重建
需要 Rust stable 工具链。
git clone https://github.com/1716775457damn/rust-seek.git
cd rust-seek
cargo build --release
# 产物
./target/release/rust-seek # macOS / Linux
./target/release/rust-seek.exe # WindowsLinux 额外依赖:
sudo apt-get install -y \
libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libxkbcommon-dev libssl-dev libgtk-3-dev推送 v* tag 触发四平台并行构建:
git tag v4.5.0
git push origin v4.5.0GitHub Actions 在 Windows / macOS ARM / macOS Intel / Ubuntu 上并行构建,约 5 分钟后在 Releases 生成全部二进制。
MIT © 2025