惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Jina AI
Jina AI
博客园 - 聂微东
S
SegmentFault 最新的问题
量子位
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页

材料与逻辑

如何理解动力粘度η 铝合金牌号系列对比及选型指南 TPE选型攻略 一次搞懂PPAP:从提交到批准的完整指南 铝合金阳极氧化工艺详解 APQP 第五阶段:量产、反馈、评定与纠正 APQP 第四阶段:产品与过程验证 APQP 第三阶段:过程设计开发 控制计划(Control Plan)在制造业中的深度解析 控制计划(CP):制造业质量管理的核心支柱 OpenClaw 使用指南 PFMEA系统学习与制造业质量工具集成 第一性原理系统学习报告:从认知底层到创新实践 桌面端 EPUB 工具:Jane Reader及不同阅读器功能对比 APQP第二阶段(产品设计和开发)学习与实施指南 APQP第一阶段:顾客声音(VOC)向项目指标转化的标准化指南 制造业研发技术中的WBS(工作分解结构)应用 一个玩具车项目,讲清新版 APQP 怎么干 质量是设计出来的:APQP 核心框架与全流程详解 思维导图系统学习与职场应用指南 ISO 4892 塑料实验室光源暴露试验标准系统梳理与应用分析 高分子材料挤出成型工艺系统研发技术报告 制造业研发人员如何制定高效的项目开发计划:从材料开发到工艺落地的系统性指南 材料耐候性评价指南:色差值 ΔE 与抗老化等级的标准转换及年限推算 自动化工具:将 Markdown 文档转换为静态 PNG 思维导图脚本 溯因推理:原理、应用与智能演进研究 高分子加工工艺对比与选型参考 归纳推理:从经验观察到知识泛化的系统化研究 铝合金及其关键部件表面处理技术 通过 rclone 自动备份 Lsky Pro(兰空图床)数据至 OneDrive
mac 下文件及文本命令行检索方案
ZhangYong · 2026-02-01 · via 材料与逻辑

在 macOS 环境下,针对文件名及文本内容的命令行检索方案通常分为模糊搜索(Fzf)代码检索(Ag/Rg)及索引检索三类。

以下是主流工具的技术实现与方案对比:


这类工具主要用于在文件内部查找特定字符串。

工具 实现原理 优势
grep POSIX 标准工具,逐行扫描文件。 无需安装,几乎所有 Unix 系统自带。
ag (The Silver Searcher) 使用 C 编写,通过多线程、忽略 .gitignore、利用 mmap() 及特定的 pcre 库提高速度。 速度远快于 grep,自动过滤版本控制文件。
rg (ripgrep) 使用 Rust 编写,基于有限自动机(NFA)引擎。支持 SIMD 加速和内存映射。 目前同类最快;在处理大文件夹和多核心并发上表现最优。

实现方案建议:

Bash

1
2
3
4
5
# 安装
brew install ripgrep

# 使用示例:在当前目录下搜索 "function_name" 并忽略二进制文件
rg "function_name"

2. 交互式模糊过滤 (Fuzzy Finder)

这类工具本身不产生数据,而是作为「管道」处理其他命令产生的列表。

fzf (Fuzzy Finder)

  • 实现机制:采用 Go 语言编写,使用滑动窗口算法进行模糊匹配。它实时读取输入流(stdin),并在内存中进行打分和排序。
  • 关键特性:支持非同步检索(输入流没读完就能开始过滤)、预览窗口功能。
  • 集成方案:通常与 fdfind 配合。

Bash

1
2
3
4
# 配合 fd (比 find 更快的路径查找工具) 进行文件快速打开
# 将以下命令加入 .zshrc 或 .bash_profile
export FZF_DEFAULT_COMMAND='fd --type f'
alias ff='fzf --preview "cat {}"'

替代传统的 find 命令。

fd

  • 实现机制:Rust 编写。默认并行遍历目录,且默认忽略隐藏文件和 .gitignore 路径。
  • 对比 findfind 是单线程的,而 fd 在多核 CPU 上通过并行 I/O 显著提升速度。

4. 深度集成方案 (Workflow)

最高效的检索方式是将上述工具结合使用:

方案 A:即时搜索并编辑 (rg + fzf + vim)

通过 rg 查找内容,传递给 fzf 进行交互式筛选,最后通过 vim 打开对应行。

方案 B:macOS 原生索引 (mdfind)

  • 原理:调用 macOS Spotlight 的元数据索引数据库。
  • 优点:速度极快,且能根据元数据(如作者、创建日期)搜索。
  • 缺点:无法搜索未被 Spotlight 索引的目录(如 node_modules)。

fzf与rg相结合

以下是一个将 rg (ripgrep) 与 fzf 结合的 Shell 函数方案。该方案实现了交互式实时搜索:在输入搜索词时,下方实时显示匹配行,右侧实时预览文件内容及高亮行号。

1. 核心代码实现

请将以下代码添加至您的 .zshrc.bash_profile 中:

Bash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
frg() {
# 1. 初始搜索词(可选)
initial_query="${*:-}"

# 2. 构造 rg 命令:强制颜色输出、列出行号
RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case "

# 3. fzf 交互流程
selected=$(
FZF_DEFAULT_COMMAND="$RG_PREFIX '$initial_query'" \
fzf --ansi \
--disabled --query "$initial_query" \
--bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \
--delimiter : \
--preview 'bat --color=always --highlight-line {2} {1}' \
--preview-window 'right,60%,border-bottom,+{2}+3/3' \
--layout=reverse
)

# 4. 解析结果并用编辑器打开
[ -n "$selected" ] && {
file=$(echo "$selected" | cut -d: -f1)
line=$(echo "$selected" | cut -d: -f2)
# 此处以 cursor/vim 为例,跳转至指定行
${EDITOR:-vim} "$file" +"$line"
}
}

2. 方案逻辑解析

参数/组件 作用描述
--disabled 禁用 fzf 自身的内部过滤,转而使用 reload 触发 rg 实时检索,适合处理海量数据。
{q} 获取 fzf 搜索框中当前的实时查询字符串。
bat 预览组件。替代 cat 以提供代码语法高亮。
--delimiter : 以冒号分隔 rg 的输出(文件路径:行号:列号:文本)。
+{2}+3/3 预览窗口自动滚动,将匹配行置于窗口中心位置。

3. 依赖安装

执行此脚本需要预装以下工具:

  1. ripgrep: brew install ripgrep (提供检索能力)
  2. fzf: brew install fzf (提供交互界面)
  3. bat: brew install bat (提供带高亮的预览效果,可选,若无则将脚本中的 bat 改为 cat)

4. 数据表现参考

在 macOS (M1/M2 芯片) 环境下,针对中大型项目(如 50,000+ 文件):

  • 响应延迟rg 的增量搜索通常在 10ms - 50ms 内返回结果。
  • 内存占用:由于采用流式处理,内存占用通常保持在 100MB 以下,远低于 GUI 编辑器的全局搜索。