grep 可以用于搜索名称中包含某些字符串的文件吗?

grep 可以用于搜索名称中包含某些字符串的文件吗?

据我所知,它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 或文件)周围的“元数据”,只能查看其内容。

相关内容