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

2 system file go

Go有这个包和功能

package main

import "os"

func main() {
  os.Rename("LICENSE", "e")
}
Run Code Online (Sandbox Code Playgroud)

这会将文件名LICENSE更改为e.

但我想做的是以下,无法找到如何做到这一点.Ruby应该这样做,所以应该去.我应该在哪里查找?

  1. 更改目录的名称而不是文件....

  2. 重命名名称的一部分.例如,如果我有一个文件或目录"示例",我想将"Exa"更改为"Stq",然后单词将为"Stqmple"

我应该使用什么包装?

提前致谢.

dsk*_*ner 11

  1. os.Rename将在目录,包括Windows上正常工作.这里唯一要质疑的是操作是否是原子操作,在所有主要平台上,答案是肯定的.

  2. 如果要查找与模式匹配的文件和目录,则需要查看filepath包.这将允许您遍历目录,此时您可以检查每个文件并根据您的要求匹配名称.看看func Walktype WalkFn文档的.http://golang.org/pkg/path/filepath/#Walk

这是一个Walk用于在给定目录或其任何子目录中定位png文件的示例:

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)
}
Run Code Online (Sandbox Code Playgroud)

func visit是你在评论中做的事情,请务必导入"字符串":

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\n", path, newpath)
        os.Rename(path, newpath)
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)