使用“find”命令更有效地搜索目录的方法
本教程将带您了解在 Linux 中查找目录的不同方法。您可能已经知道,在 Linux 中,一切都是文件,包括目录。 Linux 用户在命令行中执行的常见操作之一是搜索文件或目录。
有多种不同的方法和实用程序可用于在命令行上搜索文件,例如 find、locate 和 which。然而,最后一个实用程序(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"
要查找更多有趣和高级的使用信息,请阅读 find 和 locate 的手册页。
man find
man locate
最后要说的是,与 locate 命令相比,find 命令在 Linux 系统中搜索文件(或目录)时更加可靠和高效。
与以前一样,不要忘记通过下面的评论部分向我们发送您的反馈或问题。最后,始终保持与 Tecmint 的连接。