网站搜索

在 Linux 上有一种更快的方法来查找文件,我希望我早些知道


我下载了一个 AppImage,但几天前,当我需要使用它时,我不太确定我把它保存在哪里。虽然我怀疑它在下载文件夹,但可悲的是,该文件夹已经成了各种文件和截图的堆放地。所以我在终端中使用了 find 命令。

然而,让我感到吃惊的是,在等待 find 完成时,我开始手动搜索下载文件夹。我已经习惯了在 Linux 上的慢速文件搜索;我只是没有使用最有效的工具。

我以为慢速搜索只是使用 Linux 的一部分

然后我将命令并排比较,看到自己接受了多少摩擦

大多数 Linux 用户首先学习如何使用 find 命令。这很合理,因为它普遍可用且功能强大。它在精确过滤方面也表现良好。然而,我们使用它的频率非常高,即使在它并不是完成某些任务的正确工具时也是如此。

你需要理解 find 实际是如何工作的。它会对你的文件系统进行实时爬行,逐个扫描目录,而不是使用预先构建的索引。当你没有太多文件夹或系统比较整洁时,这没有问题。然而,一旦文件多年积累,或者你有大型的开发目录或容器,你就会注意到 find 停顿的情况。如果你输入错误的参数标志而不得不重新开始,等待就会变得更加令人沮丧。

除此之外,find 的语法并不是最直观的,我经常发现自己在试图记住各种标志,而不是实际进行搜索。

find . -type f -iname "*.png"

使用 fd 时,相同的搜索如下所示:

fd png

如果你每周使用几次,find 的语法会变得繁琐。这并不是说它没有用处。如果你编写脚本或需要精确、考虑权限的过滤,find 是一个很好的选择。它不需要你安装任何额外的软件,但如果每天搜索都使用它,就意味着要接受比所需更多的摩擦。

这是堆栈与其他工具的比较方式:

工具

它如何搜索

大型系统上的速度

语法努力

了解 .gitignore

彩色输出

最适合

找到

实时文件系统爬取

随着目录增长而变慢

高(需要详细标志)

不

不

脚本、可移植过滤、精确查询

fd

实时文件系统爬取

比寻找更快

低(通俗术语可用)

是

是

日常文件搜索,开发工作流程

plocate

预构建索引

无论大小几乎瞬时

非常低

不

不

广泛发现,系统文件,二进制文件

fzf

导入到任何来源

即时(互动层)

无(你输入片段)

取决于来源

是

交互式导航,命令历史

我第一次使用 fd 时,就不再害怕文件搜索了

感觉不太像是在写命令,更像是在输入我真正想要的东西

Fd 是 find 的现代替代品。它的重点是让使用体验尽可能自然,但由于它在 Linux 上不是默认安装的,很多人没有考虑使用它。你可以用一条命令来安装它:

# Ubuntu/Debian
sudo apt install fd-find
# Fedora
sudo dnf install fd
# Arch
sudo pacman -S fd

fd 和 find 之间的主要区别在于一些累积的小细节。fd 允许不区分大小写的搜索,并提供可以一目了然查看的彩色结果。当我第一次在项目目录中搜索而没有被 node_modules 压得透不过气时,我开始欣赏 fd 会自动遵守 .gitignore。除非你明确请求,否则它默认会隐藏点文件。

只需运行 fd .env 就足以让我一目了然地获得可读的结果。我不必记住确切的目录或笨拙地处理语法。这种简单性鼓励搜索。然而,对于无法安装软件包的远程服务器,find 仍然是更好的选择。

索引搜索是 Linux 搜索最终让我恍然大悟的时刻

在不到一秒钟的时间里看到数千个文件出现改变了我对整个问题的看法






Fd 确实非常快,但这仍然没有让我为 plocate 做好准备。fd 和 find 会实时遍历你的文件系统,而 plocate 则通过预先构建的系统数据库来提供搜索结果。自 Ubuntu 22.04 起,它已经成为默认工具,即使在非常杂乱的设备上,也能以惊人的速度返回搜索结果。

当我运行命令 plocate obs-plugin 时,几乎感觉结果在我运行完之前就已经出现了。然而,它不会搜索你的实时系统,所以如果你有新创建的文件,它们可能还没有更新到数据库中。运行 sudo updatedb 来更新数据库。

当你几乎只记得某件东西存在于某个地方,而不知道具体目录时,plocate 是更好的选择;而 fd 更适合在项目中使用,并且当你需要实时结果时。

fzf 让终端感觉不再像命令行,更像 Spotlight

曾经我可以互动式搜索时,我就不再关心东西被保存在哪里

我使用 Linux 的方式比任何其他工具都更多地受到 fzf 的影响。我无法描述它而不显得夸张。

这不是你传统的搜索命令,而是一个模糊查找器。然而,要使用它,你必须执行一次性步骤,为 bash 或 zsh 启用 shell 集成。之后,你只需按 Ctrl + T 就可以在终端的任何位置获取当前目录树中可滚动的实时文件列表。当你输入部分名称或大致近似值时,你将看到列表实时缩小。

你甚至可以运行像 fd | fzf 这样的命令,并获得速度和交互性,因为它将 fd 的快速、.gitignore 感知的结果直接传递到 fzf 的交互式过滤器中。此外,当你使用 Ctrl + R 时,命令历史也可以通过可过滤的列表进行搜索。

工具一直都在那里;我只是从未想过去看

当我从总是使用 find 切换到为每项任务选择更合适的工具时,Linux 系统变得更易接近。它向我展示了问题很少出在计算机本身,而更多出在我们选择如何使用它。更快地查找文件的方法不是单一的工具或命令;这取决于具体的场景。但使用 find、fd、plocate 和 fzf 让我接触到了一些最为极其有用的 Linux 命令。

相关文章