Linux下在文件夹所有文件中查找相关内容

1. 使用grep

1.1 说明

grep是在使用Linux时经常会用到的一个命令了,这个命令平时大都主要用来进行对一段输出的关键字定位,但是这个命令也可以通过使用某些参数来达到文件夹文件内容遍历的效果

1.2 语法

1
grep -nr "str" path

1.3 参数

  • grep: 就是grep命令
  • -nr: n是line number行号,r是recursive,可以理解为遍历文件文件夹
  • “str”: 双引号里面的str就是要查找的内容,用双引号何以使用空格和一些字符进行查找
  • path: path就是查找路径,默认是./,也就是当前目录开始,也可以手动指定目录

1.4 实例

1
grep -nr "Welcome to the exchange link" /home/wxzhou/project/PhaGCN2/z2/hexo

1.5 优缺点

  • 优点:命令简单方便,简短
  • 缺点:会遍历所有文件,效率较低

2. 使用find、xargs和grep配合

2.1 说明

find是查找指令,用来查找文件的;xargs可以将标准输入作为另一个命令的参数;grep上面已经解释过了。那么,如果使用find来循环查找文件,使用他输出的文件名作为参数给xargs,xargs再将文件名作为grep的参数输入,使用grep来查找文件内容进行定位不久可以实现文件内容查找了吗

2.2 语法

1
find path -name "PATTEN" | xargs grep -n "str" | grep "str"

2.3 参数

  • find、xargs、grep:上面已经讲过,分别是三个软件
  • name:就是通过名字查找,后面跟着的参数可以通过正则表达式类似的方法限定文件名
  • 其他grep或者类似的参数据不赘述了

2.4 实例

1
find /home/$USER/.config -name "*.sh" | xargs grep "/bin/bash" | grep "/bin/bash"

2.5 优缺点

  • 优点:可以通过-name来限定文件名,从而减少grep查看文件内容的次数,提高效率
  • 缺点:命令冗长,难记