Go自学团队:Day 1 :批量文件重命名,替换文件名

phpip · 2018-03-10 11:00:45 · 4214 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-10 11:00:45 的主题,其中的信息可能已经有所发展或是发生改变。

/**
批量文件重命名,替换文件名
王参加
2018-03-08 23:00
 */
package main

import (
    "flag"
    "fmt"
    "os"
    "path/filepath"
    "strings"
)

func main() {
    // 解析命令行参数
    var dir string
    flag.StringVar(&dir, "d", "", "要替换的目录物理路径,如:/tmp/go/")

    var oldstr string
    flag.StringVar(&oldstr, "o", "", "要替换的字符:例如:替换 .php 或者 .inc.")

    var newstr string
    flag.StringVar(&newstr,"n" ,"","替换后的字符:例如:.inc.php")
    //下面这行是解析的,不能忘记
    flag.Parse()

    if dir == "" || oldstr == "" || newstr == "" {
        fmt.Println("工具名称:文件重命名 - 自动化运维工具 - 作者:王参加")
        fmt.Println("")
        fmt.Println("使用方法:./rename -d \"/tmp/go/\" -o \"inc.test.php\" -n \".inc.php\"")
        flag.Usage()
        return
    }

    // 遍历文件夹,获取文件路径
    paths := make([]string, 0)
    filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
        if !info.IsDir() {
            paths = append(paths, path)
        }
        return nil
    })

    // 遍历文件路径,修改文件名
    for i,path := range paths {
        //newPath := filepath.Join(filepath.Dir(path), fmt.Sprintf(pattern, i+1)+filepath.Ext(path))
        //filepath.Base(path)
        str:=filepath.Base(path)
        str = strings.Replace(str, oldstr, newstr, -1)
        //filepath.Ext(path)

        filepath.Base(path)
        newPath := filepath.Join(filepath.Dir(path), str)
        fmt.Println(i+1)
        fmt.Println(path)
        fmt.Println(newPath)
        os.Rename(path, newPath)
    }
}

希望一起进度学习的朋友可以申请加入自学团队:http://163.fm/8Qokjg5e 申请加入后,每周有3天需要提交作业。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4214 次点击  
加入收藏 微博
1 回复  |  直到 2018-09-18 16:36:41
fanghao811
fanghao811 · #1 · 7年之前

自学团队满了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传