如何“grep”的文件名而不是文件的内容?
grep用于在一个文件中查找是否有任何行匹配给定的正则expression式。 不过,我有这种情况 – 我想写一个正则expression式,将匹配文件名本身(而不是文件的内容)。 我将从系统的根目录运行它,以查找所有与正则expression式匹配的文件。
例如,如果我想find所有以“f”开头并以.frm结尾的VB表单文件,我将使用正则expression式 –
"f[[:alnum:]]*\.frm"
可以grep做到这一点? 如果没有,是否有一个实用工具,让我这样做? 谢谢。
在这种情况下,您需要使用find
而不是grep
。
您也可以使用find
与grep
或egrep
结合使用:
$ find | grep "f[[:alnum:]]\.frm"
正如Pablo所说,你需要使用find
而不是grep
,但是不需要pipe道find
grep
。 find
有内置的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