package main import ( "bufio" "flag" "io/ioutil" "log" "os" "path/filepath" "strings" ) var ( dir = flag.String("d", "./attaches", "目录") mode = flag.String("m", "scan", "模式:scan扫描目录 rename更名") sourceDatafile = flag.String("sdf", "./source.txt", "原始数据文件(不能换顺序)") targetDatafile = flag.String("tdf", "./target.txt", "目标数据文件(不能换顺序)") ) // init func init() { flag.Parse() } // scan func scan() { fo1, err := os.Create(*sourceDatafile) if err != nil { log.Fatal(err) } fo2, err := os.Create(*targetDatafile) if err != nil { log.Fatal(err) } defer fo1.Close() defer fo2.Close() fs, err := ioutil.ReadDir(*dir) if err != nil { log.Fatal(err) } for _, f := range fs { if strings.HasPrefix(f.Name(), ".") { continue } fo1.WriteString(f.Name() + "\n") fo2.WriteString(f.Name() + "\n") } } // rename func rename() { fi1, err := os.Open(*sourceDatafile) if err != nil { log.Fatal(err) } fi2, err := os.Open(*targetDatafile) if err != nil { log.Fatal(err) } defer fi1.Close() defer fi2.Close() source, target := make([]string, 0, 0), make([]string, 0, 0) br1 := bufio.NewReader(fi1) for { bytes, _, err := br1.ReadLine() if err != nil { break } source = append(source, string(bytes)) } br2 := bufio.NewReader(fi2) for { bytes, _, err := br2.ReadLine() if err != nil { break } target = append(target, string(bytes)) } if len(source) != len(target) { log.Println("数据文件,源 目标 长度不一致") return } for index, s := range source { oldName, newName := s, target[index] log.Println(oldName, ">>", newName) os.Rename(filepath.Join(*dir, oldName), filepath.Join(*dir, newName)) } } // main func main() { switch *mode { case "scan": scan() case "rename": rename() } }