给定一个目录查找目录下包含关键字的目录和文件

从一个目录paths下查找包含关键字的目录、文件、文件内容中有关键字的文件

/*
查找paths目录下包含关键字的结果
case1 是目录,包含关键字
case2 是文件,文件名路径包含关键字
case3 文件内容包含关键字
*/
func FindKeyword(paths string, keyword string) {
    //读取paths文件信息,结果是os.FileInfo类型
    fileinfo, err := os.Stat(paths)
    if err != nil {
        fmt.Println(err)
    }
    //FileInfo有IsDir()方法可以判断是否是目录,还有Mode()方法返回FileMode类型的结果,表示文件的模式和权限
    //等价于FileMode类型的IsDir()方法,FileMode还有IsRegular()判断是否是普通文件
    if fileinfo.IsDir() {
        if strings.Contains(paths, keyword) {
            fmt.Println("case1:" + paths)
        }
        //读取paths这个目录下的所有文件信息,返回的是os.FileInfo类型
        fileinfos, err := ioutil.ReadDir(paths)
        if err != nil {
            fmt.Println(err)
        }
        for _, fi := range fileinfos {
            //Name()方法返回文件信息中的文件名
            fname := fi.Name()
            //将paths和fname使用slash连接起来
            newpaths := filepath.Join(paths, fname)
            fmt.Println(newpaths)
            FindKeyword(newpaths, keyword)
        }
    } else {
        //文件名路径中有关键字
        if strings.Contains(paths, keyword) {
            fmt.Println("case2:" + paths)
        }
        //读取文件的全部内容
        content, err := ioutil.ReadFile(paths)
        if err != nil {
            fmt.Println(err)
        }
        //文件内容中有关键字
        if strings.Contains(string(content), keyword) {
            fmt.Println("case3:" + paths)
        }
    }
}

  

猜你喜欢

转载自www.cnblogs.com/chengsheng/p/10629270.html