参考:lunar1983的专栏
实现:从给定目录树中grep出含制定字符串的行,并给出所在路径
代码如下所示:
#!/bin/sh - if [ $# -ne 2 ] then echo "usage traverse <dir> <str>" exit fi { function ergodic(){ for file in ` ls $1` do if [ -d $1"/"$file ] #如果 file存在且是一个目录则为真 then ergodic $1"/"$file $2 else local path=$1"/"$file #得到文件的完整的目录 local name=$file #得到文件的名字 if [[ `cat $path | grep $2` ]] then echo "" echo LOC:$path fi cat –n $path | grep $2 fi done } } ergodic $1 $2
效果图:
还有一种方法,可以直接调用find指令完成查找文件,将结果输出至grep(参考APUE(3),p190)
对于find,我们使用选项-type f限制输出列表只包含普通文件。
这样做的目的是,grep命令不能在目录中搜索模式,我们也想避免不必要的出错消息。
find . -type f -print | xargs grep STU
ps:如果要想在压缩文件内寻找文本片段,可以使用:
find . -type f -print | xargs bzgrep STU
done