如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
当前回答
在POSIX系统中,找不到grep的-r参数和grep-rn“东西”。不会运行,但如果使用find命令,它将:
查找-键入f-exec grep-n“stuff”{}\-打印
Solaris和HP-UX同意。
其他回答
如果您正在从目录结构中查找所有文件中的特定内容,您可以使用find,因为它更清楚您在做什么:
find -type f -exec grep -l "texthere" {} +
注意,-l(l的小写)显示包含文本的文件的名称。如果要打印匹配项本身,请将其删除。或者使用-H将文件与匹配项一起获取。总之,其他备选方案包括:
find -type f -exec grep -Hn "texthere" {} +
其中-n打印行号。
grep -r "texthere" .
第一个参数表示要搜索的正则表达式,而第二个参数表示应该搜索的目录。在这种情况下。表示当前目录。
注意:这适用于GNUgrep,在某些平台(如Solaris)上,您必须特别使用GNUgrep而不是传统实现。对于Solaris,这是ggrep命令。
也:
find ./ -type f -print0 | xargs -0 grep "foo"
但grep-r是更好的答案。
对于.gz文件,递归扫描所有文件和目录更改文件类型或放置*
find . -name \*.gz -print0 | xargs -0 zgrep "STRING"
如果您只想跟踪实际的目录,而不是符号链接,
grep -r "thingToBeFound" directory
如果您希望遵循符号链接以及实际目录(注意无限递归),
grep -R "thing to be found" directory
由于您正在尝试递归grep,以下选项可能对您也有用:
-H: outputs the filename with the line
-n: outputs the line number in the file
因此,如果您希望在当前目录或任何子目录中查找包含达斯·维德的所有文件,并捕获文件名和行号,但不希望递归遵循符号链接,则命令如下
grep -rnH "Darth Vader" .
如果你想在目录中找到所有提到的单词cat
/home/adam/Desktop/TomAndJerry
并且您当前在目录中
/home/adam/Desktop/WorldDominationPlot
如果您希望捕获字符串“cats”的任何实例的文件名而不是行号,并且希望递归在找到符号链接时遵循符号链接,您可以运行以下任一操作
grep -RH "cats" ../TomAndJerry #relative directory
grep -RH "cats" /home/adam/Desktop/TomAndJerry #absolute directory
资料来源:
运行“grep--help”
对符号链接的简短介绍,对于任何阅读此答案并被我提到的符号链接所迷惑的人:https://www.nixtutor.com/freebsd/understanding-symbolic-links/