快速解答
搜索文本文件:使用 grep 或 ripgrep 搜索纯文本、代码、日志和配置文件。
搜索文档内容:使用桌面应用程序搜索 PDF、Word、Excel、LibreOffice 等文档。
想按名称查找文件:使用 find 或 locate。
我测试了大量 Linux 文件搜索命令和应用程序——远比本文介绍的更多——并从中选出了最实用、最有效的方法。我在 Ubuntu 上测试了文中的示例,并在整篇文章中使用了同一组 TXT、PDF、ODT、DOCX 及其他文件。
请先使用下表选择合适的方法,然后阅读对应的部分。
您应该使用哪种 Linux 搜索方法?
最佳方法主要取决于您需要搜索的文件类型。
| 任务 | 最佳选项 |
| 使用标准 Linux 命令搜索文本文件 | grep |
| 快速搜索大型文件夹中的文本文件 | ripgrep |
| 按文件名而非内容查找文件 | find 或 locate |
| 搜索 PDF、Word、LibreOffice、Excel 及其他文档的内容 | SeekFast |
| 使用免费的开源索引式文档搜索工具 | Recoll 或 DocFetcher |
grep 和 ripgrep 工具搜索文本文件的内容,而 find 和 locate 则搜索文件名和路径。这些工具非常适合技术类文件,但无法可靠地搜索复杂文档格式的内容。因此,面对装满文档的文件夹与装满日志或代码的文件夹时,正确的解决方案并不相同。
使用 grep 命令搜索文件中的文本
grep 命令是 Linux 中用于查找文件内文本的标准工具。它最适合搜索纯文本、源代码、日志、CSV 文件、Markdown 文件和配置文件。
要在当前文件夹的 .txt 文件中搜索某个单词,请使用:
grep "budget" *.txt
要搜索某个文件夹及其所有子文件夹,请使用递归搜索:
grep -R "budget" ~/Documents/stories
实际使用时,我通常会添加行号和文件名,因为这样能让结果更易于使用:
grep -RIn "budget" ~/Documents/stories
以下是各选项的含义:
- -R 递归搜索文件夹。
- -I 跳过二进制文件。
- -n 显示行号。

不区分大小写搜索
要忽略大小写差异,请添加 -i:
grep -RIn -i "report" ~/Documents/stories
这样可以找到 "report"、"Report" 和 "REPORT"。
仅搜索完整单词
要匹配完整单词,请添加 -w:
grep -RIn -w "policy" ~/Documents/stories
这样可以避免匹配 "policyholder" 等更长单词中的内容。
仅搜索特定文件类型
要仅搜索具有特定扩展名的文件,请使用 --include:
grep -RIn --include="*.txt" "budget" ~/Documents/stories
对于多个扩展名,请重复使用该选项:
grep -RIn --include="*.txt" --include="*.md" "budget" ~/Documents/stories
如果文件夹包含多种文件类型,而您只想搜索基于文本的文件,这会很有用。
从搜索中排除文件夹
大型文件夹通常包含您不想搜索的目录,例如 archive、drafts 或备份目录。您可以像下面这样排除它们:
grep -RIn --exclude-dir="archive" --exclude-dir="drafts" "risk" ~/Documents/stories
这样可以让结果更简洁,并可能大幅提高搜索速度。
搜索精确短语或多个字符串
要搜索精确短语,请将短语放在引号中:
grep -RIn "sales report" ~/Documents/stories
要搜索多个字符串中的任意一个,请为每个字符串添加一个 -e 选项:
grep -RIn -e "sales" -e "budget" -e "payment" ~/Documents/stories
您还可以通过 -E 使用扩展正则表达式:
grep -RInE "customer|product|service" ~/Documents/stories
这两个命令都会匹配至少包含一个字符串的行。如果您需要查找同时包含 "sales" 和 "payment" 的文件,即使它们位于不同行,也可以分两步筛选文件名:
grep -RIlZ "sales" ~/Documents/stories | xargs -0 -r grep -Il "payment"

以上是 grep 命令最常见的用法。有关完整参考信息,请参阅 GNU grep 手册。
grep 无法满足需求的情况
grep 命令功能强大,但它仍然是一种纯文本搜索工具。它通常适用于以可读文本形式存储的文件,但并不适合作为搜索 Word 文档、Excel 电子表格、LibreOffice 文件、PDF、电子书或其他文档格式的通用解决方案。
如果尝试对包含各种文档的文件夹使用 grep,您往往会漏掉重要匹配项或得到无法阅读的输出。遇到这些情况,请直接查看文档搜索工具。
使用 ripgrep 更快地进行命令行搜索
ripgrep 通常以 rg 命令运行,是一种现代命令行搜索工具。官方 ripgrep 指南说明,它默认会递归搜索目录并应用自动筛选。对于大型代码和文本文件夹中的递归搜索,它通常比标准 grep 更快。
要搜索当前文件夹及其子文件夹,请使用:
rg "budget"
要搜索特定文件夹:
rg "budget" ~/Documents/stories
要仅搜索特定文件类型:
rg "budget" -g "*.txt" ~/Documents/stories
ripgrep 默认还会遵循 .gitignore,这对源代码项目很有帮助,因为它会自动跳过许多生成的文件或无关文件。
搜索代码、日志、Markdown、配置文件或其他纯文本时,请使用 ripgrep。对于 PDF、Word、LibreOffice、Excel 及其他文档,请改用文档搜索工具。

应该使用哪个:grep 还是 ripgrep?
这两个工具都能搜索纯文本内容,但适合的工作流程略有不同:
- 如果您需要一个几乎所有 Linux 系统都已自带的标准命令,请使用 grep。
- 如果您需要在代码仓库和大型文本文件夹中进行快速递归搜索,请使用 ripgrep。
- ripgrep 默认搜索子文件夹并遵循
.gitignore,而 grep 命令需要递归选项;除非您主动排除路径,否则它会进行更直接的搜索。 - 对于 PDF、Word、Excel、LibreOffice 及其他复杂文档格式,请使用文档搜索工具,而不是这两个命令。
如何在 Ubuntu、Mint、Fedora、Debian 及其他 Linux 发行版上安装 ripgrep
ripgrep 搜索命令在各 Linux 发行版上都相同,只有安装命令会因软件包管理器而异。以下命令遵循官方 ripgrep 安装说明。
| 发行版 | 安装 ripgrep |
| Ubuntu、Linux Mint、Debian | sudo apt install ripgrep |
| Fedora | sudo dnf install ripgrep |
| openSUSE | sudo zypper install ripgrep |
| Arch Linux | sudo pacman -S ripgrep |
在 Linux 中按名称查找文件和目录
如果您知道完整文件名或文件名的一部分,请使用 find 命令。GNU Findutils 手册介绍了它的文件名、时间、大小及其他筛选条件。此命令不会搜索文件中存储的文本;如需搜索文本,请使用 grep 或 ripgrep。
要在 stories 文件夹及其子文件夹中查找名称包含特定单词的文件,请使用:
find ~/Documents/stories -type f -iname "*profit*"
使用 -iname 进行不区分大小写的部分匹配:
find ~/Documents/stories -type f -iname "*shopping*"
星号会匹配 "shopping" 前后的任意字符。要查找目录而非文件,请将 -type f 改为 -type d:
find ~/Documents/stories -type d -iname "*archive*"
您还可以按扩展名、修改日期或大小筛选文件:
find ~/Documents/stories -type f -iname "*.pdf"
find ~/Documents/stories -type f -mtime -7
find ~/Documents/stories -type f -size +100M
这些命令分别查找 PDF 文件、大约最近七天内修改的文件,以及大于 100 MB 的文件。
使用 locate 更快地查找文件
locate 命令搜索文件名数据库,而不是每次都扫描文件系统,因此按文件名查找通常比使用 find 快得多。plocate 手册说明了这种索引式查找的工作原理:
locate -i "profit"
由于 locate 使用索引,最近创建的文件可能要等数据库更新后才会出现。在您有权刷新数据库的系统上,请使用:
sudo updatedb
如果需要最新结果或详细筛选条件,请使用 find。如果希望以最快的方式在已索引的位置中查找现有文件名,请使用 locate。


适用于 Linux 的最佳文档搜索工具
grep 和 ripgrep 工具专为纯文本而设计。要搜索 PDF、Word、Excel、LibreOffice、电子书及其他格式,请使用下面的一种文档搜索应用程序;仅包含图像的扫描版 PDF 需要先进行 OCR。
如果您想搜索包含不同文档类型的文件夹、预览匹配的句子,并在不使用终端的情况下查看按相关性排序的结果,SeekFast 非常合适。当您需要搜索新的文件夹或内容经常变化的文件夹时,它尤其方便。
如果您偏好免费的开源软件,并且愿意提前创建索引,Recoll 和 DocFetcher 都是不错的选择。建立索引需要进行一些准备,但可以让您更方便地在已有文档集合中反复搜索。
ChatGPT 桌面应用程序采用了不同的方法。它可以处理您选择的文件夹、回答自然语言问题、比较文件并总结发现。当您需要理解信息而不是仅仅进行穷尽式精确匹配搜索时,它最适合作为补充工具使用。
SeekFast
SeekFast 是一款适用于 Windows、macOS 和 Linux 的文档搜索工具。它专为搜索大型文档集合的内容而设计,而不是仅通过终端搜索纯文本文件。
它的主要优势是使用方便。您只需选择文件夹、输入搜索词,就可以在打开各个文件之前看到匹配的句子。如果您不知道确切的文件名,并且需要搜索大量文档的内容,这会非常有用。

当文件夹中包含多种文档类型时,SeekFast 尤其有用,因为它可以搜索多种格式的内容,并按相关性对结果排序。这使它比传统的精确匹配文件搜索更接近网络搜索体验。
主要功能包括:
- 文档搜索 - 搜索超过 120 种受支持的文件格式,包括 PDF、Word、LibreOffice、Excel、文本文件和电子书。
- 匹配句子预览 - 在打开文件之前查看相关文本。
- 按相关性排序的结果 - 匹配程度更高的文件会显示在结果中的更靠前位置。
- 多关键词搜索 - 即使单词并不相邻,也能找到相关文档。
- 图形化工作流程 - 无需为常见文档搜索任务编写终端命令。
优点
- 搜索包含实际文档的文件夹时,比 grep 方便得多。
- 当您记得文档中的某些词,却不记得文件名时非常有效。
- 显示上下文,因此您可以在打开文件之前评估结果。
- 适用于包含 PDF、Office、LibreOffice、文本及其他格式的混合文件夹。
缺点
- SeekFast 免费版每次最多只能搜索 50 个文件。
- 它并非用于取代 grep 或 ripgrep 进行源代码搜索。
- 它不支持专业命令行工具那样的高级正则表达式工作流程。
如果您的主要任务是搜索大量文档的内容,而不是搜索代码或日志文件,请下载 SeekFast,并选择您的一个文档文件夹进行试用。
Recoll
Recoll 是一款适用于 Linux 及其他类 Unix 系统的免费开源桌面搜索工具。它使用索引,这意味着它会先扫描您选择的文件夹,然后让您快速进行搜索。

对某些文档格式的支持取决于系统中安装的辅助应用程序。如果您想要一款开源的索引式桌面搜索工具,并且不介意花些时间进行配置,它是一个不错的选择。
优点
- 免费且开源。
- 作为索引式 Linux 桌面搜索工具,表现良好。
- 安装适当的辅助程序后,可以搜索多种文档格式。
缺点
- 初始索引和配置可能需要一些时间。
- 对于普通用户,其工作流程可能显得较为复杂。
- 文档格式支持可能取决于已安装的系统软件包。
DocFetcher
DocFetcher 是一款适用于 Linux、Windows 和 macOS 的免费开源桌面搜索应用程序。DocFetcher Pro 是提供额外功能的独立付费版本。与 Recoll 一样,它通过为您选择的文件夹创建索引来工作。

DocFetcher 支持 PDF、Microsoft Office、OpenDocument、HTML 和纯文本等常见文档格式。如果您想要一款免费的跨平台工具,并且愿意在搜索前创建索引,它会很有用。
优点
- 标准版 DocFetcher 免费且开源。
- 适用于 Linux、Windows 和 macOS。
- 可以显示已索引文档的文本预览。
缺点
- 必须先创建索引,才能搜索文件夹内容。
- 其界面看起来比许多现代搜索工具更陈旧。
- 如果您经常临时搜索文件夹,又不想提前创建索引,使用起来不太方便。
ChatGPT 桌面应用程序
ChatGPT 桌面应用程序已针对受支持的 Linux 发行版推出预览版。它不是传统的文件搜索程序,而是一个可以处理您所选文件夹中文件的 AI 工作区。
要将其用于本地文件,请在 ChatGPT Work 或 Codex 中打开本地文件夹,并授予其访问您想使用的文件的权限。随后,您可以使用自然语言提问,例如:
- “查找讨论业务风险的文档。”
- “比较销售报告,并显示最重要的差异。”
- “查找与此项目相关的信息并进行总结。”

当您不记得确切措辞时,这种方法最为有用。ChatGPT 可以帮助您按含义搜索、关联多个文件中的信息、总结搜索结果并进行解释。Codex 还可以搜索和分析源代码项目。
优点
- 可接受自然语言问题,而不仅限于关键词或正则表达式。
- 可以总结、比较和解读多个文件中的信息。
- 当下一步是理解结果,而不仅仅是定位某个短语时,它非常有用。
缺点
- 它并非旨在保证找到每个精确匹配项,因此当完整性至关重要时,请使用 grep 或 ripgrep。
- 它不提供 SeekFast、Recoll 或 DocFetcher 那样专门的索引式搜索工作流程。
- Linux 版本仍处于预览阶段,官方仅支持部分发行版。
- 它需要 ChatGPT 账户并使用在线服务,而不是完全离线运行。在将其用于敏感文档之前,请查看 OpenAI 如何使用 ChatGPT 和 Codex 数据,并评估您的隐私要求。
请将 ChatGPT 作为传统搜索工具的补充:grep 和 ripgrep 更适合精确文本搜索;文档搜索应用程序更适合以可预测的结果浏览文档集合;当您希望理解、比较或总结所找到的信息时,ChatGPT 会很有用。
总结
在本文中,我分享了在测试中最适合用于在 Linux 上查找文件和搜索文件内容的方法。不过,Linux 用户通常都有自己偏爱的工具和工作流程。您使用哪种方法?我是否遗漏了某个实用的命令或应用程序?
您可以通过以下任一方式分享您的经验:
- 使用下方的表单发表评论。
- 加入我们在 Reddit 上的讨论。
常见问题
1. 如何在 Linux 中按名称查找文件?
使用 find 命令。例如:
find ~/Documents/stories -type f -iname "*profit*"
此命令会在 stories 文件夹及其子文件夹中搜索文件名包含 "profit" 的文件,并且不区分大小写。
2. find 和 grep 有什么区别?
find 命令搜索文件名、路径和文件属性。grep 命令搜索纯文本文件中存储的文本。如果您知道文件名,请使用 find;如果您记得文件中的某些词,请使用 grep 或文档搜索工具。
3. 应该使用 find 还是 locate?
如果需要最新结果和详细筛选条件,请使用 find。如果希望通过预先创建的索引更快地查找文件名,请使用 locate。新创建的文件可能要等 locate 的数据库更新后才会出现。
4. 如何搜索 Linux 文件夹中所有文件的文本?
grep -R 命令是标准选择。例如:
grep -RIn "budget" ~/Documents/stories
这最适合纯文本文件、源代码、日志和配置文件。
5. 如何同时搜索子文件夹?
使用 grep -R 进行递归搜索:
grep -RIn "budget" ~/Documents/stories
此命令会搜索 stories 文件夹及其子文件夹,跳过二进制文件,并显示行号。
6. 如何仅搜索特定文件类型?
使用 --include。例如:
grep -RIn --include="*.txt" "budget" ~/Documents/stories
对于多个扩展名,您可以重复使用 --include。
7. 如何从 grep 搜索中排除文件夹?
使用 --exclude-dir。例如:
grep -RIn --exclude-dir="archive" --exclude-dir="drafts" "risk" ~/Documents/stories
8. 如何搜索多个可能出现的单词?
为每个字符串添加一个 -e 选项。例如:
grep -RIn -e "sales" -e "budget" -e "payment" ~/Documents/stories
此命令会查找包含任意一个字符串的行。
9. ripgrep 比 grep 更好吗?
在大型代码和文本文件夹中进行递归搜索时,ripgrep 通常更快、更方便;而 grep 命令几乎默认存在于所有 Linux 系统中,非常适合普通文本搜索。两者都不是通用文档搜索工具。
10. 为什么 grep 找不到 PDF 或 Word 文件中的文本?
grep 命令专为纯文本设计。PDF、Word、LibreOffice 和 Excel 文件以更复杂的格式存储文本,因此 grep 可能会漏掉匹配项或显示无法阅读的输出。请使用文档搜索工具搜索这些文件。
11. 在 Linux 上搜索 PDF、Word 和 LibreOffice 文件内容的最佳方法是什么?
请使用能够识别文档格式的搜索工具。如果您需要预览和按相关性排序的结果,SeekFast 使用起来很方便。如果您偏好索引式桌面搜索,Recoll 和 DocFetcher 是不错的开源替代方案。
12. SeekFast 可以在 Linux 上运行吗?
可以。SeekFast 提供 Linux 版本,并且可以通过图形界面搜索多种文档格式的内容。
13. 应该使用 grep、ripgrep 还是 SeekFast?
使用 grep 进行普通纯文本搜索。使用 ripgrep 在代码和文本文件夹中进行快速递归搜索。需要搜索 PDF、Word、LibreOffice、Excel 及其他文档的内容并查看预览时,请使用 SeekFast。

