如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
当前回答
在IBM AIX Server(操作系统版本:AIX 5.2)中,使用:
find ./ -type f -print -exec grep -n -i "stringYouWannaFind" {} \;
这将打印出文件中的路径/文件名和相对行号,如:
./inc/xxxx_x.h
2865:/**描述:stringYouWanna查找*/
无论如何,这对我来说很有用:)
其他回答
grep -r "texthere" .
第一个参数表示要搜索的正则表达式,而第二个参数表示应该搜索的目录。在这种情况下。表示当前目录。
注意:这适用于GNUgrep,在某些平台(如Solaris)上,您必须特别使用GNUgrep而不是传统实现。对于Solaris,这是ggrep命令。
在POSIX系统中,找不到grep的-r参数和grep-rn“东西”。不会运行,但如果使用find命令,它将:
查找-键入f-exec grep-n“stuff”{}\-打印
Solaris和HP-UX同意。
也:
find ./ -type f -print0 | xargs -0 grep "foo"
但grep-r是更好的答案。
这是在我当前的机器上(windows 7上的git bash)适用于我的案例的例子:
find ./ -type f -iname "*.cs" -print0 | xargs -0 grep "content pattern"
对于带有空格的路径,我总是忘记-print0和-0。
编辑:我的首选工具现在是ripgrep:https://github.com/BurntSushi/ripgrep/releases . 它真的很快,并且有更好的默认值(比如默认情况下的递归)。与我的原始答案相同的示例,但使用了ripgrep:rg-g“*.cs”“content pattern”
这里有一个递归(使用bash和sh进行了少量测试)函数,它遍历给定文件夹($1)的所有子文件夹,并使用grep搜索给定文件($2)中的给定字符串($3):
$ cat script.sh
#!/bin/sh
cd "$1"
loop () {
for i in *
do
if [ -d "$i" ]
then
# echo entering "$i"
cd "$i"
loop "$1" "$2"
fi
done
if [ -f "$1" ]
then
grep -l "$2" "$PWD/$1"
fi
cd ..
}
loop "$2" "$3"
运行它和示例输出:
$ sh script start_folder filename search_string
/home/james/start_folder/dir2/filename