网站搜索

使用“find”命令更有效地搜索目录的方法


本教程将带您了解在 Linux 中查找目录的不同方法。您可能已经知道,在 Linux 中,一切都是文件,包括目录。 Linux 用户在命令行中执行的常见操作之一是搜索文件或目录。

有多种不同的方法和实用程序可用于在命令行上搜索文件,例如 find、locatewhich。然而,最后一个实用程序(which)仅用于定位命令。

在本教程的范围内,我们将主要关注 find 实用程序,它在实时 Linux 文件系统上搜索文件,并且与 locate 相比更高效、更可靠。

locate 的缺点是它读取由 updatedb 创建的一个或多个数据库,它不会搜索实时文件系统。此外,它也没有提供从何处搜索(起点)的灵活性。

以下是运行 locate 命令的语法:

locate [option] [search-pattern]

为了演示 locate 的缺点,我们假设我们正在当前工作目录中搜索名为 pkg 的目录。

注意:在下面的命令中,选项--basename-b告诉locate< 仅匹配文件(目录)基本名称(即 pkg),但不匹配路径 (/path/to/pkg)。其中 \ 是通配符,它会禁用 pkg*pkg* 隐式替换。

locate --basename '\pkg'

从上面的命令输出中可以看到,locate将从根(/)目录开始搜索,这就是匹配其他同名目录的原因。

因此,要解决此问题,请按照以下简化语法使用 find

find starting-point options [expression]

让我们看几个例子。

要在当前工作目录中搜索上面的相同目录 (pkg),请运行以下命令,其中 -name 标志读取表达式,在本例中为目录基名。

find . -name "pkg"

如果遇到“权限被拒绝”错误,请使用 sudo 命令,如下所示:

sudo find . -name "pkg"

您可以通过使用 -type 标志指定文件类型(下面的命令中 d 表示目录)来阻止 find 搜索除目录之外的其他文件类型,如下所示:

sudo find . -type d -name "pkg"

此外,如果您希望以长列表格式列出目录,请使用操作开关 -ls

sudo find . -type d -name "pkg" -ls

接下来,选项 -iname 将启用不区分大小写的搜索:

sudo find . -type d -iname "pkg" 
sudo find . -type d -iname "PKG" 

要查找更多有趣和高级的使用信息,请阅读 findlocate 的手册页。

man find
man locate

最后要说的是,与 locate 命令相比,find 命令在 Linux 系统中搜索文件(或目录)时更加可靠和高效。

与以前一样,不要忘记通过下面的评论部分向我们发送您的反馈或问题。最后,始终保持与 Tecmint 的连接。