Answers:
在这种情况下,您需要使用find
代替grep
。
您也可以find
结合使用grep
或egrep
:
$ find | grep "f[[:alnum:]]\.frm"
例
find <path> -name *FileName*
从手册:
查找名称模式
文件名的基础(除去前导目录的路径)与外壳模式模式匹配。由于删除了前导目录,因此考虑与-name匹配的文件名将永远不会包含斜杠,因此“ -name a / b”将不会与任何内容匹配(您可能需要使用-path)。元字符(“ *”,“?”和“ []”)与“。”匹配。基本名称的开头(这是findutils-4.2.2的更改;请参见下面的“标准符合性”部分)。要忽略目录及其下的文件,请使用-prune;。请参阅-path的描述中的示例。括号未被认为是特殊的,尽管事实上,包括Bash在内的某些外壳在外壳样式中赋予了特殊含义。使用fnmatch(3)库函数执行文件名匹配。不要忘记将模式用引号引起来,以防止它被外壳扩展。
find . -maxdepth 1 -name "*filename*" -print
正如Pablo所说,您需要使用find
代替grep
,但是不需要通过管道find
传递到grep
。find
具有内置的功能:
find . -regex 'f[[:alnum:]]\.frm'
find
是一个功能非常强大的程序,用于按名称搜索文件,并支持按文件类型搜索,深度限制,将不同的搜索词与布尔运算结合在一起以及对找到的文件执行任意命令。有关更多信息,请参见查找手册页。
-mtime
和-mmin
您可以使用grep找到文件的完整路径,只需管道输出tree即可
tree -f | grep filename
这是一个您可以放入.bash_profile或.bashrc中的函数
findfile(){ tree -f | grep $1; } # $1 = filename, -f is full path
find -iname "file_name"
Syntax :-
find -type type_descriptor file_name_here
type_descriptor类型:
f:常规文件
d:目录
l:符号链接
c:字符设备
b:块设备
-type typedescriptor
单独使用文件名。这是一个错误吗?
不,grep可以满足以下要求:
grep -rl "filename" [starting point]
grep -rL "not in filename"
-l
和-L
选项。
也适用于多个文件。
tree /path/to/directory/ | grep -i "file1 \| file2 \| file3"
-regex
选项内置的功能。