博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go 1.5keyword搜索文件夹、文件、文件内容_修复一个小BUG
阅读量:6941 次
发布时间:2019-06-27

本文共 1957 字,大约阅读时间需要 6 分钟。

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")   //搜索的文件夹。默认是当前文件夹。path	flag.StringVar(&i, "r", "", "-r=matchstring") //keyword。index	flag.BoolVar(&c, "c", false, "-c=true")       //是否在文件内容搜索keyword,content	flag.BoolVar(&f, "f", false, "-f=true")       //是否依据keyword查找文件,file	flag.BoolVar(&d, "d", false, "-d=true")       //是否依据keyword查找文件夹,directory	flag.Parse()	if len(i) == 0 {		fmt.Println("keyword不能为空")		return	}	re = []byte(i)	if err := filepath.Walk(p, walk); err != nil {		fmt.Println("Walk:", err)	}	if count == 0 {		fmt.Println("搜索路径:", p)		fmt.Println("keyword:", i)		if d {			fmt.Println("是否搜索文件夹:", d)		}		if f {			fmt.Println("是否搜索文件:", f)		}		if c {			fmt.Println("是否搜索内容:", c)		}	}	fmt.Printf("共发现 : %d\n", 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()), re) {			atomic.AddInt32(&count, 1)			fmt.Println("匹配到文件:", path)			return nil		}	}	if c {		return read(path)	}	return nil}//在文件里查找keywordfunc 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, re) {			atomic.AddInt32(&count, 1)			fmt.Printf("在文件:%s第 %d行\n", path, i)			fmt.Println(string(bytes.TrimSpace(b)))		}	}	return nil}

转载地址:http://sjinl.baihongyu.com/

你可能感兴趣的文章
SDN交换机在云计算网络中的应用场景
查看>>
超融合超越企业传统存储绕不开的六个问题
查看>>
深度剖析微服务架构的九大特征
查看>>
这八种方式教您最大提升网络带宽
查看>>
在自然语言处理、大数据、AI加持下,中译语通要“听每一条数据的心跳”
查看>>
最新安全报告:DDoS 攻击次数减少但是规模更大
查看>>
创业公司做数据分析(六)数据仓库的建设
查看>>
6招破解物联网产品开发安全性困境
查看>>
浅谈VR、AR、MR
查看>>
Linux systemctl 命令完全指南
查看>>
涨价停不下来?浅析SSD涨价的背后原因
查看>>
阿里云「MaxCompute最佳实践」征文大赛获奖文章公布
查看>>
借助全闪存 超融合扩展延伸到新的用途
查看>>
美国清洁能源发电成本与储能技术成本全披露
查看>>
医疗大数据带来多重“健康红利”
查看>>
卖掉用户和产品,互联网先驱雅虎从此就是个投资公司
查看>>
《Android应用开发攻略》——3.9 使用本地运行时应用程序日志分析现场错误情况...
查看>>
专访网金社CEO吴志刚,如何看待互金潮落及Fintech潮起?
查看>>
面对众多的前端框架,我们该如何学习?
查看>>
海外科技股玩闪崩 吓走泡沫吓不走真成长
查看>>