find 了:一行 fd 命令背后的三个人生道理副标题:关于隐藏文件的”洁癖”、实习生与老油条的爱恨情仇、以及为什么你的终端应该学会”边选边看”
.zshrc事情是这样的。你想在项目文件夹里翻出所有跟 zshrc 有关的文件,顺手敲了一行命令:
fd zshrc ~/ws/todd/effectiveCodingBase/
然后,什么都没有。
你开始怀疑人生:路径是不是写错了?文件是不是被我自己手滑删了?要不要打开 Neo-tree 手动翻一遍?
打住。不是你的问题,是 fd 的”洁癖”。
.zshrc 前面那个点,在 Unix 世界里是”隐藏文件”的暗号。而 fd 这个工具有个近乎强迫症的默认设定:默认不显示隐藏文件,理由大概是”怕你被一堆 .git、.cache、.DS_Store 淹没”。
这份好意换来的代价就是:你认认真真敲的命令,结果啥也搜不到,连个警告都没有。
解法就一个字母:
fd -H zshrc ~/ws/todd/effectiveCodingBase/
-H = --hidden,翻译过来就是:”我知道有风险,我自愿看隐藏文件”。
人生道理 #1:很多工具的”默认行为”不是 bug,是一种”善意的过滤”。但善意用错场合就是绊脚石。搞清楚一个工具”默认藏起了什么”,往往比学会它的”高级参数”更重要——因为高级参数是加分项,而默认行为的坑是送命题。
fd 和 find 的区别,像极了老油条和实习生写了十几年脚本的人都用过 find。它靠谱,但靠谱得有点笨:
| 维度 | find(实习生型) | fd(老油条型) |
|---|---|---|
| .gitignore | 视而不见,node_modules 照样全翻 |
默认自动跳过 |
| 隐藏文件 | 全部翻出来,不管你要不要 | 默认不翻,你说了算(-H) |
| 语法 | find . -iname "*.txt" |
fd txt |
| 速度 | 单线程,老实巴交 | 并行处理,通常快一个身位 |
| 输出 | 黑白,朴素 | 彩色,一眼分清文件/目录 |
find 是那种”你没明确说不让我看的地方,我全给你翻一遍”的实习生——认真但费电,还容易把 node_modules 里几万个文件都搜一遍,搜出一屏幕垃圾。
fd 是那种”默认帮你避开该避开的坑,你要真想看隐藏文件,说一声就行”的老油条——效率高,但你得懂它的”潜规则”。
人生道理 #2:工具越”聪明”,你越需要理解它的假设前提。find 什么假设都没有,所以最笨也最”诚实”;fd 帮你做了一堆合理假设,所以更好用,但也更需要你知道”它在替你做什么决定”。
找到文件只解决了”看见”的问题,真正的效率提升在于找到之后立刻处理。这里祭出 -x 和 -X:
# -x:每个结果单独执行一次(类似 xargs -I{})
fd -H zshrc ~/ws/todd/effectiveCodingBase/ -x diff {} ~/.zshrc
# -X:所有结果一次性打包给一个命令
fd -H zshrc ~/ws/todd/effectiveCodingBase/ -X code
打个比方:
-x 是一道一道单独上桌——每个文件单独处理,适合 diff、逐个改名这种”一对一”的活。-X 是一次性全端上桌——所有结果打包给一个命令,适合批量塞进编辑器打开一堆 tab。而且 fd 内置的转义处理帮你避开了一个经典地雷:文件名带空格。用过原生 xargs 的都懂,忘了加 -0 分隔符,分分钟把 my zshrc backup.txt 拆成两个参数,报错报到怀疑人生。fd -x/-X 直接帮你把这坑填了。
如果说前面都是”找到文件”,这一段才是真正的”工作流”——找、看、选、开,一气呵成:
fd -H -t f zshrc ~/ws/todd/effectiveCodingBase/ \
| fzf --preview 'bat --color=always {}' \
| xargs -r nvim
拆解这条流水线:
fd -H -t f —— 只要文件(-t f),隐藏的也不放过| fzf --preview 'bat ...' —— 交给 fzf,一边上下选,一边右边预览内容| xargs -r nvim —— 选中的直接用 nvim 打开,-r 保证空选择时不会误开一个空白 nvim如果你已经在用 fzf 玩转 kubectx/kubens 选集群、选 namespace,这套”搜索 → 预览 → 选择 → 执行”的思路其实是同一个心智模型,只是把对象从 K8s 资源换成了文件而已。
彩蛋——多选模式:加个 -m,可以同时选中多个文件,一起丢给 nvim 开多个 buffer 对比:
fd -H -t f zshrc ~/ws/todd/effectiveCodingBase/ \
| fzf -m --preview 'bat --color=always {}' \
| xargs -r nvim
Tab 多选,Enter 确认,一步到位。
一行 fd -H zshrc ... 表面上是在找一个配置文件,但往深了看,它其实在提醒我们三件事:
fd 比 find 好用,不是因为参数更多,而是因为它对”你大概率想要什么”的猜测更贴近真实开发场景。fd + fzf + nvim 这种”搜索即操作”的组合拳,才是真正省下的那些”看似不起眼但天天在发生”的时间。下次再遇到某个命令”什么都搜不到”的时候,先别怀疑自己,问一句:它是不是替我藏了点什么?