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 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥15 DruidDataSource一直closing
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据