Linux中查找目录下的文件是否含有某个字符串

在日常开发中,我们常常有这样的需求:想要在一个都是文本文件的文件夹中查找文件中含有某些字符串的文件。这篇文章给出了一种解决方案:通过find、xargs和grep三个命令实现。

解决方案

查找目录下的所有文件中是否含有某个字符串”Ali”

1
find .|xargs grep -ri "Ali"

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

1
find .|xargs grep -ri "Ali" -l

如果是在一个Git 项目中进行查找,可以使用git的grep命令:

1
git grep -n hello_world

find

find 是一个利用正则表达式查找当前目录下的文件及子目录中文件的命令,查找的根据可以是文件名,也可以是文件从属关系等等
同时结合-exec选项和其他命令结合使用
在这里find的作用是将查找范围定在当前的目录下的所有文本展现出来通过xargs 提供给grep 作为参数

参考:http://man.linuxde.net/find

xargs

xargs 是一个给其他命令传递参数的一个过滤器,它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
在这里xargs 为后面的grep 提供查找的内容

参考:http://man.linuxde.net/xargs

grep

grep 是一种强大的文本搜索工具。grep 也是一个管道命令,接受standard output 作为查找的文本。不作为管道命令的时候后面接文件名作为参数。
这里使用到了三个选项:-r 递归搜索 -i 忽略大小写 -l 仅显示文件名

参考:http://man.linuxde.net/grep