golang 多线程查找文件内容

 1 package main
 2
 3 import (
 4     "fmt"
 5     "io/ioutil"
 6     "os"
 7     "path/filepath"
 8     "strings"
 9 )
10
11 var matchCount = 0
12 var ch = make(chan int, 512)
13
14 func findFile(path string, text string) {
15     var pathArray [100]string
16     var count = 0
17     filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
18         if err != nil {
19         }
20         //find text
21         if !info.IsDir() {
22             if info.Size() < 1024*1024 {
23                 pathArray[count] = path
24                 count++
25                 if count >= 100 {
26                     count = 0
27                     go findText(pathArray[0:100], text)
28                     <-ch
29                 }
30             }
31         }
32         return nil
33     })
34     go findText(pathArray[0:count], text)
35     <-ch
36
37     fmt.Printf("一共发现了 %d 个匹配的文件", matchCount)
38
39 }
40
41 func findText(paths []string, text string) {
42     for _, path := range paths {
43         fi, err := os.Open(path)
44         if err != nil {
45             panic(err)
46         }
47         defer fi.Close()
48         fd, err := ioutil.ReadAll(fi)
49         if err != nil {
50             panic(err)
51         }
52
53         if strings.Index(string(fd), text) > -1 {
54             matchCount++
55             fmt.Println(path)
56         }
57     }
58     ch <- 1
59 }
60
61 func main() {
62     args := os.Args
63     if len(args) < 3 {
64         fmt.Println("需要两个参数 path text")
65         return
66     }
67     path := args[1]
68     text := args[2]
69
70     _, err := os.Stat(path)
71
72     if err != nil {
73         fmt.Println("path不存在")
74     } else {
75         findFile(path, text)
76     }
77 }

计数器增加的时候应该加锁

时间: 2024-11-07 04:26:57

golang 多线程查找文件内容的相关文章

Linux里如何查找文件内容

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被查找的字符串&quo

【转】Linux里如何查找文件内容

原文网址:http://blog.chinaunix.net/uid-25266990-id-199887.html Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i

python自定义查找文件内容

#!/usr/bin/env python#coding:utf8#此脚本为查找递归目录下所有文件匹配的内容 import os,sys,tab def paths(path):        list_path=os.walk(path)        all_file=[]        for p,d,fl in list_path:                for f in fl:                        pfile=os.path.join(p,f)    

Linux里如何查找文件内容 (转)

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e “正则表达式” 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被查找的字符串&quo

[转] Linux 查找文件内容

Linux查找文件内容的常用命令方法. 从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件grep "thermcontact" */*.in 从文件内容查找与正则表达式匹配的行:$ grep –e "正则表达式" 文件名 查找时不区分大小写:$ grep –i "被查找的字符串" 文件名 查找匹配的行数:$ grep -c "被

Linux查找文件内容小技巧

目录 grep ag linux系统查找文件内容最常见的命令有grep和ag grep grep是比较常见的查找命令 # 在当前目录的py文件里查找所有相关内容 grep -a "broadcast" *.py # 在当前目录及子目录里(递归)查找,最后一个参数可以换成指定目录 grep -r "broadcast" . # 在指定目录及子目录里(递归)查找,不区分大小写 grep -r -i "broadcast" /src ag 相比grep

Java 多线程查找文件中的内容

学过了操作系统,突然不知道多线程有什么用了. 看了一下百度,发现多线程,可以提升系统利用率 在系统进行IO操作的时候,CPU可以处理一些其他的东西,等IO读取到内存后,CPU再处理之前的操作. 总之可以在用户层面,可以提升效率,不过,有时候多线程设计不当,调试也很麻烦 今天尝试一下简单的查找文件后缀以txt 里的内容 demo SeachFileContent类,用来查询文件内容 package thread; import java.io.File; import java.io.IOExce

linux用grep查找文件内容

从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名 从文件内容查找与正则表达式匹配的行: $ grep –e “正则表达式” 文件名 查找时不区分大小写: $ grep –i "被查找的字符串" 文件名 查找匹配的行数: $ grep -c "被查找的字符串" 文件名 从文件内容查找不匹配指定字符串的行: $ grep –v "被查找的字符串" 文件名 从根目录开始查找所有扩展名为.xml的文本文件,

python 查找文件内容

输入查找的文件夹路径,要查找的内容关键字(可以指定多个),要查找的文件类型(可以是多个),搜索出符合条件的文件,并记录所有符合条件的行号及行内容. 写的感觉有点冗余,但好歹还能使用^-^,主要是方便手头工作. # coding:utf8 import os from os.path import * # enter the search dir print r"""Search file tool(Ver1.0) dirpath /k keywords [/e fileext