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

时间:2013-11-21 07:56:23

标签: file go system

Go有这个包和功能

package main

import "os"

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

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

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

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

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

  3. 我应该使用什么包?

    提前致谢。

2 个答案:

答案 0 :(得分:10)

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

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

  3. 以下是使用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)
    }
    

    这是一个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
    }
    

答案 1 :(得分:0)

首先我认为os.Rename也重命名目录(至少在Unix下也是文件)。

第二:也许你可以使用strings.Replace来做这些事情或者在这里做一些编程?