文件夹在你的浏览器中读取。不上传任何内容,也不会改动任何东西。
关于在文件内查找文本
每个人都曾靠着文件里面写着的东西去找文件——两百张发票中某一张上的客户名、配置文件里的一个旧密码、笔记文件夹中的某句话。而每个人也都被系统自带的搜索框辜负过。
Windows 搜索只对特定位置和特定类型的文件建立内容索引;凡是没索引过的,它返回的是「什么也没有」,而不是告诉你它没找过。这比报错更糟,因为你会由此断定那段文字并不存在。Spotlight 做得好一些,但对自己漏掉了什么同样闭口不谈。
这个工具会打开每一个候选文件并读完它。你得到的是文件名、行号和那一行本身——同样重要的是,还有一份它读不了的东西的计数。
只读:不上传任何内容,也不改动任何东西。
使用方法
- 点击选择要搜索的文件夹并选中它。浏览器会请求读取权限
- 输入要查找的内容
- 需要时勾选区分大小写、全词匹配或正则表达式
- 用只处理这些类型收窄范围——只搜 txt, md 会比打开所有东西快得多
- 点击搜索,然后复制匹配结果或下载 CSV
每一处匹配都会显示行号和该行内容,匹配到的文字会被高亮。特别长的一行会围绕匹配处裁剪,而不是被丢弃,所以即便是压缩成一行的文件也能给出可用的答案。
它会告诉你跳过了什么
这正是系统自带搜索做错的地方,所以每次搜索之后都会写在屏幕上:
- 非文本——含有 NUL 字节的文件是二进制。在 JPEG 里搜「发票」只可能得到噪声,所以这类文件会被跳过并计数
- 过大——超过 8 MB 的一律跳过。一个巨大的日志文件不该把标签页卡死
- 无法读取——被别的程序锁定、扫描途中消失,或者被操作系统拒绝
如果一次搜索空手而归,而摘要里写着跳过了 40 个文件,你就知道该放宽类型筛选再来一次。一个沉默的「0」则什么也不会告诉你。
三种匹配方式
- 纯文本——默认方式。你输入什么就按字面查什么,所以搜 价格 ($) 会精确找到它,无需转义
- 全词匹配——cat 匹配 cat,但不匹配 category。查名字和标识符时很有用
- 正则表达式——完整的 JavaScript 语法。日期用 \d{4}-\d{2}-\d{2},两者任一用 TODO|FIXME,行首匹配用 ^import。不合法的表达式会被明确报告为不合法,而不是悄悄地什么都匹配不到
区分大小写对三种方式都生效。
人们用它来做什么
- 在几百张发票里找出写着某个客户名的那一张
- 在一堆配置文件里定位某个被埋起来的设置
- 在笔记或 markdown 文件夹里搜索一句你只记得一半的话
- 检查项目文件夹里是不是躺着 API 密钥或密码
- 重命名之前,找出所有提到某个函数或变量的文件
- 审查导出的 CSV,看看有没有本不该出现的值
- 得到一份带行号的清单,可以直接粘进工单里
值得一提
- 可在 Windows、macOS、Linux 和 ChromeOS 上使用——它是一个网页,无需安装。它无法在 iPhone、iPad 或 Android 上工作:移动浏览器没有办法把一个文件夹交给网页
- 这里每种浏览器给出的结果都一样。 读取文件内容这件事,现代文件夹选择器和较旧的文件清单机制都能做到
- 不上传任何内容。每个文件都是在页面里打开并搜索的
- 没有索引,所以在大文件夹里的第一次搜索要花上读完它的时间。这同时也正是它永远不会过期的原因
- 每个文件最多保留 50 处匹配,屏幕上最多显示 300 个文件;CSV 则包含全部匹配
- 文件按 UTF-8 读取。使用旧式地区编码的文件可能显示出奇怪的字符,不过对于纯 ASCII 文本,搜索本身仍然有效
- 搜索在页面内运行,所以特别大的文件夹会让标签页忙上一阵。进度条会显示进展