參考: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


