我想在文件目录中查找特定模式,并希望在显示结果时排除某些模式。
我使用以下命令
find . -type f -exec grep -il 'foo' {} \; | find . -not -name "*.jar" -not -name "*.gz" -not -name "*.log" 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
显示结果时,我看到以下错误消息
find: grep terminated by signal 13
Run Code Online (Sandbox Code Playgroud)
有人可以指导我为什么会出现此错误消息,以及是否有更好的命令可用于获得所需的结果(基本上从结果集中排除 jar 文件或日志文件或某些其他类型的文件)?
Kev*_*vin 10
我想你想使用find作为grep该管道的下半年; find不是那样工作的。您应该做的是在一个命令中完成所有操作:
find . -type f -not -name "*.jar" -not -name "*.gz" -not -name "*.log" -exec grep -il 'foo' {} + 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
或者
find . -type f -not -name "*.jar" -not -name "*.gz" -not -name "*.log" -exec grep -qi 'foo' {} \; -print 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
或者让grep遍历树本身并在之后过滤名称(使用grep,而不是find):
grep -irl foo . | grep -v -e '\.jar$' -e '\.gz$' -e '\.log$'
Run Code Online (Sandbox Code Playgroud)