dongyishen5796 2013-11-21 07:56
浏览 2383
已采纳

Golang:重命名目录和部分文件重命名?

Go has this package and function

package main

import "os"

func main() {
  os.Rename("LICENSE", "e")
}

This changes the filename LICENSE to e.

But what I want to do is the following and can't find how to do it. Ruby does this so should Go. Where should I look up?

  1. Change the name of directory not files....

  2. Rename just the part of the name. For example, if I have a file or directory "Example", I would want to change "Exa" to "Stq," then the word would be "Stqmple"

What package should I use?

Thanks in advance.

  • 写回答

2条回答 默认 最新

  • dsdvr06648 2013-11-21 16:30
    关注
    1. os.Rename will work fine on directories, including windows. The only bit to question here is whether the operation is atomic, which on all major platforms the answer is yes.

    2. If you want to locate files and directories that match a pattern, you'll want to look at the filepath package. This will let you traverse a directory at which point you can inspect each file and match the name against your requirements. Look at func Walk and type WalkFn of the documentation. http://golang.org/pkg/path/filepath/#Walk

    Here's an example of using Walk to locate png files in a given directory or any of its subdirectories:

    package main
    
    import (
        "flag"
        "fmt"
        "os"
        "path/filepath"
    )
    
    var flagPath = flag.String("path", "", "recursively traverse path and print png filepaths to stdout.")
    
    func visit(path string, f os.FileInfo, err error) error {
        if filepath.Ext(path) == ".png" {
            fmt.Println(path)
        }
        return nil
    }
    
    func main() {
        flag.Parse()
        if *flagPath == "" {
            flag.Usage()
            return
        }
        filepath.Walk(*flagPath, visit)
    }
    

    Here's a func visit that does what your asking about in the comment, be sure to import "strings":

    func visit(path string, f os.FileInfo, err error) error {
        if name := f.Name(); strings.HasPrefix(name, "name_") {
            dir := filepath.Dir(path)
            newname := strings.Replace(name, "name_", "name1_", 1)
            newpath := filepath.Join(dir, newname)
            fmt.Printf("mv %q %q
    ", path, newpath)
            os.Rename(path, newpath)
        }
        return nil
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 5037端口被adb自己占了
  • ¥15 Error in check.length("fill") : 'gpar'成分'fill'的长度不能为零
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误