Go 1.5关键字搜索目录、文件、文件内容_修复一个小BUG
发布时间:2020-12-16 18:40:29 所属栏目:大数据 来源:网络整理
导读:package mainimport ("bufio""bytes""flag""fmt""io""os""path/filepath""sync/atomic")var re []bytevar count int32var c,f,d boolvar i,p stringfunc main() {flag.StringVar(p,"p","./","-p=finddir") //搜索的目录,默认是当前目录,pathflag.StringVar
package main import ( "bufio" "bytes" "flag" "fmt" "io" "os" "path/filepath" "sync/atomic" ) var re []byte var count int32 var c,f,d bool var i,p string func main() { flag.StringVar(&p,"p","./","-p=finddir") //搜索的目录,默认是当前目录,path flag.StringVar(&i,"r","","-r=matchstring") //关键字,index flag.BoolVar(&c,"c",false,"-c=true") //是否在文件内容搜索关键字,content flag.BoolVar(&f,"f","-f=true") //是否根据关键字查找文件,file flag.BoolVar(&d,"d","-d=true") //是否根据关键字查找文件夹,directory flag.Parse() if len(i) == 0 { fmt.Println("关键字不能为空") return } re = []byte(i) if err := filepath.Walk(p,walk); err != nil { fmt.Println("Walk:",err) } if count == 0 { fmt.Println("搜索路径:",p) fmt.Println("关键字:",i) if d { fmt.Println("是否搜索目录:",d) } if f { fmt.Println("是否搜索文件:",f) } if c { fmt.Println("是否搜索内容:",c) } } fmt.Printf("共发现 : %dn",count) } func walk(path string,info os.FileInfo,err error) error { if err != nil { return err } if info.IsDir() { if d && bytes.Contains([]byte(info.Name()),re) { atomic.AddInt32(&count,1) fmt.Println("匹配到目录:",path) } return nil } if f { if bytes.Contains([]byte(info.Name()),1) fmt.Println("匹配到文件:",path) return nil } } if c { return read(path) } return nil } //在文件中查找关键字 func read(path string) error { File,err := os.Open(path) defer File.Close() if err != nil { fmt.Println(path,":",err) return err } r := bufio.NewReader(File) i := 0 for { i++ b,_,err := r.ReadLine() if bytes.Contains(b,[]byte{0}) { //排除二进制文件 return nil } if err != nil { if err == io.EOF { if bytes.Contains(b,re) { atomic.AddInt32(&count,1) fmt.Printf("在文件:%s第 %d行n",path,i) fmt.Println(string(bytes.TrimSpace(b))) } return nil } return err } if bytes.Contains(b,1) fmt.Printf("在文件:%s第 %d行n",i) fmt.Println(string(bytes.TrimSpace(b))) } } return nil } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |