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条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?