据我所知,它grep
只能用于搜索内容中包含字符串的文件。
它可以用于搜索名称中包含字符串的文件吗?我读了联机帮助页,但不这么认为。
也grep
发音为 [gri:p] 或 [grep] (以 IPA 表示法)?我读的是前者。
答案1
您似乎正在寻找find
:
find . -type f -name "*foo*"
将在当前目录和子目录中查找包含foo
名称的文件名。
find . -maxdepth 1 -type f -name "*foo*"
将查找foo
仅包含在当前目录中的文件名。
答案2
用于find
生成文件名列表,然后grep
解析它们:
find . | grep 'stack[oO0]verfl[oO0]w'
除非您有一个文件系统,其中文件名列表本身就是一个文件,否则我不知道如何grep
单独做到这一点。
答案3
只是为了好玩,您可以使用grep
它自身在当前目录中生成(非空)文件的名称,并生成另一个文件grep
来查找您想要的文件:
grep -l . * 2>/dev/null | grep 'your_pattern'
这2>/dev/null
是必需的,因为grep
如果您要求它在目录中查找而不提供-r
选项,则会抱怨。
买者自负:这对于名称中包含换行符的文件执行效果不佳,并且会忽略点(隐藏)文件和空文件。find
这是正确的方法,在这里。
答案4
回答你的问题,不。 Grep 无法通过文件名进行搜索,它只能搜索呈现给它的文本数据。所以你基本上有 2 个选择grep
。
您可以让它搜索您提供给它的文件列表,然后grep
依次打开每个文件,查找您指示它查找的模式,或者您可以向它提供数据流通过标准输入。
在任何一种情况下都grep
无法查看其输入源(STDIN 或文件)周围的“元数据”,只能查看其内容。