这个教程将带你了解在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"
如果遇到“Permission denied”错误,请使用sudo command,如下所示:
$ 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页面。
$ man find $ man locate
最后,find命令在Linux系统中搜索文件(或目录)时,相对于locate命令更可靠和高效。
与以前一样,请不要忘记通过下面的评论部分发送您的反馈或问题。最后,始终保持与Tecmint连接。