如何在 Linux 中递归搜索目录名称

Linux 中的所有内容都存储在目录中,在编写 bash 脚本时,按名称搜索目录通常很有用。幸运的是,您可以使用 find
命令递归搜索目录名称并显示匹配项。
搜索目录
find
命令用于在 Linux 中搜索目录。默认情况下,它是完全递归的,因此它将搜索所有子目录以找到匹配项。
如果您使用 -type d
标志,find
将在“目录模式”下运行,并且只搜索目录,不匹配任何文件。您可以将它与 -name
一起使用以按名称搜索目录:
find . -type d -name "search"

此命令从当前目录开始,但也可以在其他目录中搜索,例如 ~
。
使用 -name
的问题是它只会匹配直接名称,这意味着它会失败,除非它匹配整个目录名称。不过,您可以使用通配符来解决这个问题,在搜索字符串前后放置通配符将匹配目录名称中任意位置的子字符串。如果您也包含文件名,则可以使用通配符来匹配以特定扩展名结尾的文件
find . -type d -name "*search*"

但是,这只会匹配目录的名称,并且仍然会忽略父目录。如果您想使用整个文件路径进行匹配,则需要使用下面介绍的 Regex 选项。
find
将打印出每个匹配目录的列表,但您需要小心确保在使用绝对路径或相对路径时保持一致,因为这会影响最终响应。如果您使用相对路径,例如“当前目录”的句点,则响应将是相对的。但是如果直接指定路径,即使是当前目录,路径也是绝对的,从root开始。

find
不仅可以进行文本搜索,还可以用于根据时间戳、文件大小和其他 Linux 标识符来匹配文件。它还可以与 -exec
一起使用以在每个文件或目录上运行命令。
使用正则表达式搜索
您还可以将更高级的过滤与 find
结合使用,将其与正则表达式 (Regex) 一起使用以查找复杂搜索查询的匹配项。
使用 Regex 的一个主要好处是它将匹配整个目录,包括引导到的基本目录。
您可以使用带有 -regex
的 Regex 代替 -name
。它还有助于使用 -regextype sed
打开与 sed
兼容的正则表达式。
寻找 。 -type d -regextype sed -regex “.*one\/.*”

在此示例中,正则表达式以 .*one
开头,以匹配所有以“one”结尾的目录。句点和通配符将匹配任何由此引出的子字符串。然后使用 \/
对正斜杠进行转义以匹配目录的末尾,然后使用另一个通配符来匹配任何目录名称。
总的来说,这将匹配父目录以“one”结尾的任何目录,无论它在哪里,甚至在子目录中。正则表达式非常强大,您需要小心确保您的正则表达式与您想要的完全匹配——不多也不少。
使用 grep 和查找
由于 find
也可以输出目录的原始列表,因此可以将其通过管道传递给其他命令进行处理。例如,grep
用作文本搜索实用程序,可以在命令行上快速使用以进行简单的搜索和突出显示。
find . -type d | grep foo

grep
本身也是一个成熟的搜索实用程序,可以与正则表达式等工具一起使用以增强搜索。您可以阅读我们的使用指南以了解更多信息。