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") //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
} //在文件里查找keyword
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, re) {
atomic.AddInt32(&count, 1)
fmt.Printf("在文件:%s第 %d行\n", path, i)
fmt.Println(string(bytes.TrimSpace(b)))
}
}
return nil
}

Go 1.5keyword搜索文件夹、文件、文件内容_修复一个小BUG的更多相关文章

  1. 重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件

    原文:重新想象 Windows 8 Store Apps (22) - 文件系统: 访问文件夹和文件, 通过 AQS 搜索本地文件 [源码下载] 重新想象 Windows 8 Store Apps ( ...

  2. 背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件

    [源码下载] 背水一战 Windows 10 (85) - 文件系统: 获取文件夹和文件, 分组文件夹, 排序过滤文件夹和文件, 搜索文件 作者:webabcd 介绍背水一战 Windows 10 之 ...

  3. 使用FileSystemWatcher监控文件夹及文件

    引言 这一周主要精力集中学习一个同事开发的本地文件搜索项目上,其中客户端添加共享文件时主要是使用FileSystemWatcher 监控文件,并在各种事件发生时向服务器发送消息. 解决方法 FileS ...

  4. TortoiseSVN文件夹及文件图标不显示解决方法

              由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的功能都能正常的使用,但是就是文件夹或文件夹的左下角就是不显示图标,这个问题前一段时间就遇到了(那个时 ...

  5. Projects\Portal_Content\Indexer\CiFiles文件夹下文件占用磁盘空间过大问题。

    C:\Program Files\Microsoft Office Servers\12.0\Data\Office Server\Applications\9765757d-15ee-432c-94 ...

  6. [转]TortoiseSVN文件夹及文件图标不显示解决方法

    FROM : http://blog.csdn.net/lishehe/article/details/8257545 由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的 ...

  7. Win7-其中的文件夹或文件已在另一个程序中打开

    Win7-其中的文件夹或文件已在另一个程序中打开 如何解决Win7系统在删除或移动文件时提示,“操作无法完成,因为其中的文件夹或文件已在另一个程序中打开,请关闭该文件夹或文件,然后重试”.   步骤阅 ...

  8. TortoiseSVN文件夹及文件图标不显示解决方法(转发)

    地址:http://blog.csdn.net/lishehe/article/details/8257545 由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的功能都能 ...

  9. TortoiseSVN文件夹及文件图标不显示解决方法 [转]

    由于自己的电脑是win7(64位)的,系统安装TortoiseSVN之后,其他的功能都能正常的使用,但是就是文件夹或文件夹的左下角就是不显示图 标,这个问题前一段时间就遇到了(那个时候没找到合适的答案 ...

随机推荐

  1. 清除 Windows 系统垃圾的 bat

    @echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpde ...

  2. 2、COCOS2D-X内存管理机制

    在C++中.动态内存分配是一把双刃剑,一方面,直接訪问内存地址提高了应用程序的性能,与使用内存的灵活性.还有一方面.因为程序没有正确地分配与释放造成的比如野指针,反复释放,内存泄漏等问题又严重影响着应 ...

  3. Navicat Premium 12全系列

    Navicat 是香港卓软数码科技有限公司生产的一系列 MySQL.MariaDB.Oracle.SQLite.PostgreSQL 及 Microsoft SQL Server 的图形化数据库管理及 ...

  4. 附3 springboot源码解析 - 构建SpringApplication

    package com.microservice.framework; import org.springframework.boot.SpringApplication; import org.sp ...

  5. IOS开发之地图导航

    一.问题描述 现在很多的APP 都开始引入了地图和定位功能,包括一些餐饮业,团购等.他们都过定位和地图来让用户更加方便的根据自己的位置找到合适的目标,也就是说,现在地图定位已经不再是导航工具类,地图工 ...

  6. myeclipse创建maven android项目

    一.搭建环境 1.安装android maven插件,我在网上找了半天.没有找到这个插件,于是选择了在线安装.选择myeclipse 的 [help]->[install form catalo ...

  7. githug-54-git练习

    1-40: http://wiki.jikexueyuan.com/project/git-54-stage-clear/ 41-50: https://blog.csdn.net/maxam0128 ...

  8. (转)U3D DrawCall优化手记

    自:http://www.cnblogs.com/ybgame/p/3588795.html 在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题 ...

  9. (转)unity3d中脚本生命周期(MonoBehaviour lifecycle)

    自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...

  10. 从头说catalan数及笔试面试里那些相关的问题 (转)

    作者:寒小阳 时间:2013年9月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/11938973. 声明:版权所有,转载请注明出处,谢谢 ...