Grep递归 - 如何只显示包含字符串的文件,而不显示subdir的文件

时间:2015-05-13 05:30:43

标签: grep zsh

我想用grep来搜索文件。

在这种特殊情况下,我想搜索我的主目录 - / home / unknwn - 以查找包含字符串'i3'的文件。

虽然在网上搜索如何做到这一点,但我得到的印象是-H标志会为我做这个。但事实并非如此。好吧,它找到了带有字符串'i3'的目录,但它也列出了该目录中的所有文件,其中大部分文件根本没有包含字符串。

我会发布一些终端输出来显示我的意思(我将其缩短了一点并添加了行号):

  1  » grep -rH 'i3' /home/unkownentity
  2 /home/unkownentity/Dropbox/databas.key:         <Data>i33L/amU9Hye95PjMSHAbTruRI/aOX0L4e8pY/0/mh0=</Data>
  3 Binary file /home/unkownentity/Dropbox/maszeW-2015/Screenshot_2015-02-14-09-40-19.png matches
  4 Binary file /home/unkownentity/Dropbox/maszeW-2015/maszeW-2015.png matches
  5 Binary file /home/unkownentity/Dropbox/maszeW-2015/Templates/ett.zw matches
  6 Binary file /home/unkownentity/Dropbox/IMG_20131130_095638.jpg matches
  7 Binary file /home/unkownentity/Dropbox/fonts/ailerons.zip matches
  8 Binary file /home/unkownentity/Dropbox/poker-odds-chart.pdf matches
  9 Binary file /home/unkownentity/Dropbox/Widgets/uccw/uccw-req/request/htc weather/slight drizzle.png matches
 10 Binary file /home/unkownentity/Dropbox/Widgets/uccw/uccw-req/request/htc weather/mostly cloudy.png matches
 11 Binary file /home/unkownentity/Dropbox/Widgets/uccw/uccw-req/request/htc weather/chance of rain.png matches
 12 Binary file /home/unkownentity/Dropbox/Widgets/uccw/uccw-req/request/htc weather/chance of snow.png matches
 13 Binary file /home/unkownentity/Dropbox/Widgets/uccw/uccw-req/request/htc weather/hail.png matches
 14 Binary file /home/unkownentity/Dropbox/Widgets/uccw/uccw-req/request/htc weather/freezing drizzle.png matches

好。这里发生的是,而不是显示包含'i3'的所有文件实际上是: 第2行包含单词“i3”。到现在为止还挺好。但接着,它继续列出包含'i3'的文件的所有子目录中的所有文件,其中没有一个包含字符串。

这里发生了什么,我做错了什么?我想只使用grep,没有任何其他命令。希望得到一些帮助。

2 个答案:

答案 0 :(得分:1)

您可以串联使用grepfind来获取所需的输出,而不是仅使用grep命令。

您可以参考以下命令。

find /home/unkownentity -maxdepth 1 -name "*" -type f | xargs grep "i3"

maxdepth将仅列出顶级目录/home/unkownentity而不是subdir的文件。
-type f只列出文件而不是目录

答案 1 :(得分:0)

由于您使用的是zsh,因此首先应启用文件名通配:

setopt GLOB_DOTS

然后使用grep而不使用-r-I标记:

grep -HI 'i3' /home/unkownentity/*

现在,grep仅处理目录中的文件,不包含任何子目录(*匹配所有文件)。 -I表示grep也不会通过二进制文件进行搜索,因此会忽略trey。