【功能】
按指定的目錄查找出文件,如果有子目錄,子目錄也將進行搜索,將其中的文件內容進行替換。
【缺陷】
1. 沒有過濾出文本文件
2. 當文件過大時,效率不高
【代碼】
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
type ReplaceHelper struct {
Root string //根目錄
OldText string //需要替換的文本
NewText string //新的文本
}
func (h *ReplaceHelper) DoWrok() error {
return filepath.Walk(h.Root, h.walkCallback)
}
func (h ReplaceHelper) walkCallback(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if f == nil {
return nil
}
if f.IsDir() {
//fmt.Pringln("DIR:",path)
return nil
}
//文件類型需要進行過濾
buf, err := ioutil.ReadFile(path)
if err != nil {
//err
return err
}
content := string(buf)
//替換
newContent := strings.Replace(content, h.OldText, h.NewText, -1)
//重新寫入
ioutil.WriteFile(path, []byte(newContent), 0)
return err
}
func main() {
flag.Parse()
helper := ReplaceHelper{
Root: flag.Arg(0),
OldText: flag.Arg(1),
NewText: flag.Arg(2),
}
err := helper.DoWrok()
if err == nil {
fmt.Println("done!")
} else {
fmt.Println("error:", err.Error())
}
}
