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