更有效地使用’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'
Find Directory Using locate Command

从上面的命令输出中可以看到,locate将从根目录(/)开始搜索,这就是为什么其他具有相同名称的目录也会被匹配。

因此,为了解决这个问题,使用以下简化语法来使用find

$ find starting-point options [expression]

让我们看几个例子。

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

$ find . -name "pkg"

如果遇到“Permission denied”错误,请使用sudo command,如下所示:

$ sudo find . -name "pkg"
Search a Directory Using find Command

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

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

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

$ sudo find . -type d -name "pkg" -ls
Find and List Directory

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

$ sudo find . -type d -iname "pkg" 
$ sudo find . -type d -iname "PKG" 
Find Directory with Case Sensitive

要查找更多有趣和高级用法信息,请阅读findlocate的man页面。

$ man find
$ man locate

最后,find命令在Linux系统中搜索文件(或目录)时,相对于locate命令更可靠和高效。

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

Source:
https://www.tecmint.com/find-directory-in-linux/