Answers:
grep -r --exclude-dir=dev --exclude-dir=sys --exclude-dir=proc PATTERN data
资料来源:https : //stackoverflow.com/questions/2799246/grep-clusion-a-specific-folder-using
./dev
将与一起排除在外./foo/bar/dev
。使用--exclude-dir=./dev
只适用于第一种情况。
bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
的唯一问题是我无法使其在bash中正常工作。在这种情况下,我必须将它们分开。
{}
单个条目,则可能需要一个一元逗号来使其成为数组(不确定Bash如何处理它)。而不是这样做,我最终在.bash_aliases中创建了一个别名,该别名遍历我通常一直想排除的文件夹列表,例如.git,.svn,.hg,.cache,然后通过带有--exclude-dir $dir
然后将该数组扩展为grep别名。
您可以改用find:
find . -not -path "*/.svn*" -not -type d -exec grep -ni "myfunc" {} \; -print
好的,这有点倒退,您首先得到grep结果,然后是路径。也许其他人有更好的答案?
这是我的一个项目中脚本的一个完整示例,可能会有所帮助,我将此文件称为“ all_source”(标记为可执行文件),并将其放在项目的根目录中,然后像grep myfunc $(./all_source)
脚本末尾的sort 一样完全调用它可选的。
#!/bin/bash
find . \
-type d \( \
-wholename './lib' -o \
-wholename './vc6' -o \
-name 'gen' -o \
-name '.svn' \
\) -prune -o \
-type f \( \
-name '*.h' -o \
-name '*.cpp' -o \
-name '*.c' -o \
-name '*.lua' -o \
-name '*.*awk' \) -print \
| sort
此脚本返回所有的文件名的项目,该项目的比赛*.h, *.cpp, *.c, *.lua, *.*awk
,但在一个名为.svn的所有文件夹和文件夹的根不搜索,以及跳过的文件夹./lib
和./vc6
(但只有那些马上项目的根目录)。因此,当您执行grep myfunc $(./all_source)
此操作时,仅会进入那些文件。您还需要从项目的根目录中调用它。