如何“grep”的文件名而不是文件的内容?

grep用于在一个文件中查找是否有任何行匹配给定的正则expression式。 不过,我有这种情况 – 我想写一个正则expression式,将匹配文件名本身(而不是文件的内容)。 我将从系统的根目录运行它,以查找所有与正则expression式匹配的文件。

例如,如果我想find所有以“f”开头并以.frm结尾的VB表单文件,我将使用正则expression式 –

"f[[:alnum:]]*\.frm" 

可以grep做到这一点? 如果没有,是否有一个实用工具,让我这样做? 谢谢。

在这种情况下,您需要使用find而不是grep

您也可以使用findgrepegrep结合使用:

 $ find | grep "f[[:alnum:]]\.frm" 

正如Pablo所说,你需要使用find而不是grep ,但是不需要pipe道find grepfind有内置的function:

 find . -regex 'f[[:alnum:]]\.frm' 

find是一个非常强大的按名称search文件的程序,支持按文件types,深度限制,将不同的search项与布尔运算组合,并对find的文件执行任意命令。 查看查找手册页获取更多信息。

 find -iname "file_name" Syntax :- find -type type_descriptor file_name_here 

type_descriptortypes: –

f:常规文件

d:目录

l:符号链接

c:字符设备

b:块设备

 find <path> -name *FileName* 

从手册:

find-name模式

文件名的基础(删除了前导目录的path)匹配shell模式模式。 因为前导目录被删除,所以考虑与-name匹配的文件名永远不会包含斜线,所以“-name a / b”永远不会匹配任何东西(你可能需要使用-path)。 元字符(“*”,“?”和“[]”)匹配“。” 在基本名称的开头(这是find-utils-4.2.2中的一个变更;参见下面的标准符合性部分)。 要忽略目录及其下的文件,请使用-prune; 请参阅-path的描述中的示例。 大括号并不被认为是特别的,尽pipe有些贝壳包括Bash镶嵌在贝壳图案中具有特殊的含义。 文件名匹配是使用fnmatch(3)库函数执行的。 不要忘记用引号括起模式,以防止壳体膨胀。

你也可以这样做:

 tree | grep filename 

这将树命令的输出传递给grep进行search。 这只会告诉你文件是否存在。

你可以使用grepfind一个文件的完整path,只需要输出树的输出

 tree -f | grep filename 

这是一个你可以放入你的.bash_profile或.bashrc的函数

 findfile(){ tree -f | grep $1 } # $1 = filename, -f is full path