grep 是一个 Linux 工具,通常用于在文本文件中搜索特定内容。但是,在目录中搜索文件名而不是文件内容通常很有用,这可以通过grep 其他 Linux 命令行实用程序来完成
该grep 实用程序实质上从文件或标准输入中获取字符串输入,并使用模式或正则表达式对其进行搜索并打印匹配的行。
从技术上讲,您可以单独使用grep 它来搜索文件名而不是内容,但这只是因为 Linux 允许在文件名输入中使用通配符。但是,您可以使用ls 这种方式轻松地列出文件,或在任何其他命令中使用通配符,但它并不是像grep 搜索内容那样搜索文件名的真正解决方案。
grep "" ./file* -l
真正的解决方案是使用该find 实用程序,该实用程序可以搜索子目录并提供最具弹性的方式来搜索文件,因为它直接与文件系统交互。这是搜索目录时最常用的实用程序,它有很多选项——包括模式匹配和正则表达式支持。
最基本的用法是单独使用find 来打印出文件列表,包括子目录,并将该输入提供给grep. 如果您已经有使用 的脚本grep,那么通过这种方式将它们转换为匹配将非常容易。
find | grep "file"
您也可以直接使用模式find,而无需grep. -iname 与输入一起使用。
find . -iname 'file_*.txt'
grep 然而,与此不同的是,该find命令更加严格——您需要使用单引号或双引号来转义搜索字符串,并且您需要使用通配符来匹配整个字符串。如果不使用通配符来匹配名称的其余部分,则无法简单地在名称中查找子字符串。
您还可以使用正则表达式 with find,它允许更高级的匹配:
find . -regex './file.*'
此正则表达式将匹配当前目录中以“file”开头的所有文件。但是,重要的是要知道这与 ; 的工作方式不同-iname。输入包括完整的目录路径,并且必须用于./ 转义相对路径, ./.
此处显示的此命令不包括./subdirectory/ 文件夹,因为它不是以“文件”开头的。要解决此问题,您必须将导致最终正斜杠的所有内容与.*/:
find . -regex '.*/file.*'
正则表达式非常复杂,但非常强大。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/wlcs_6305/article/details/125894401
内容来源于网络,如有侵权,请联系作者删除!