Jon*_*ley 15
如果您已经知道要排除的符号链接的名称:
grep -r --exclude-dir=LINK1 --exclude-dir=LINK2 PATTERN .
Run Code Online (Sandbox Code Playgroud)
如果符号链接的名称不同,可以首先使用find命令排除符号链接,然后grep输出的文件:
find . -type f -a -exec grep -H PATTERN '{}' \;
Run Code Online (Sandbox Code Playgroud)
grep的'-H'将文件名添加到输出中(如果grep正在递归搜索,则这是默认值,但不在此处,grep正在递送单个文件名.)
我通常想修改grep以排除源控制目录.初始查找命令最有效地完成了这项工作:
find . -name .git -prune -o -type f -a -exec grep -H PATTERN '{}' \;
Run Code Online (Sandbox Code Playgroud)
现在..这是我在使用grep时排除符号链接的方法
如果您只想要与您的搜索匹配的文件名:
for f in $(grep -Rl 'search' *); do if [ ! -h "$f" ]; then echo "$f"; fi; done;
Run Code Online (Sandbox Code Playgroud)
阐释:
grep -R # recursivegrep -l # file names onlyif [ ! -h "file" ] # bash if not a symbolic link如果你想要匹配的内容输出,那么双grep怎么样:
srch="whatever"; for f in $(grep -Rl "$srch" *); do if [ ! -h "$f" ]; then
echo -e "\n## $f";
grep -n "$srch" "$f";
fi; done;
Run Code Online (Sandbox Code Playgroud)
阐释:
echo -e # enable interpretation of backslash escapesgrep -n # adds line numbers to output..当然不是完美的.但它可以完成工作!