重命名非空文件夹

huangapple go评论78阅读模式
英文:

Rename non-empty folder

问题

我正在尝试使用os.Rename()重命名非空文件夹。这里是错误信息:directory not empty。有没有办法强制重命名非空文件夹?

package main

import (
	"path/filepath"
	"log"
	"os"
	"strings"
)

var PATH = "dir/dir/"

func main() {
	err := filepath.Walk(PATH, printDir)
	if err != nil {
		log.Fatal(err)
	}
}

func printDir(path string, info os.FileInfo, err error) error {
	if err != nil {
		log.Fatal(err)
	}
	if info.IsDir() {
		arr := strings.Split(info.Name(), " ")
		if len(arr) > 1 {
			err := os.Rename(PATH + info.Name(), arr[0] + "_" + arr[1])
			if err != nil {
				log.Fatal(err)
			}
		}
	}
	return nil
}
英文:

I'm trying to rename non-empty folders using os.Rename(). Here is the error:
directory not empty. Is there away to force rename the non-empty folders?

package main

import (
	"path/filepath"
	"log"
	"os"
	"strings"
)
var PATH = "dir/dir/"
/
func main() {
	err := filepath.Walk(PATH, printDir)
	if err != nil {
		log.Fatal(err)
	}
}

func printDir(path string, info os.FileInfo, err error) error {
	if err != nil {
		log.Fatal(err)
	}
	if info.IsDir() {
		arr := strings.Split(info.Name(), " ")
		if len(arr) > 1 {
			err := os.Rename(PATH + info.Name(), arr[0] + "_" + arr[1])
			if err != nil {
				log.Fatal(err)
			}
		}
	}
	return nil
}

答案1

得分: 1

我通过在printDir函数中删除if err != nil { log.Fatal(err) }来解决了这个问题。每次运行程序时,它会以1个错误代码终止,因为其中一个文件夹已经被重命名。

// 将文件夹名称重命名为格式为first_last。
// 然后删除每个文件夹中不是jpg扩展名的所有文件。
package main

import (
	"path/filepath"
	"log"
	"os"
	"strings"
	"fmt"
)

var PATH = "dir/dir/dir"

func main() {
	err := filepath.Walk(PATH, printDir)
	if err != nil {
		log.Fatal(err)
	}
}

func printDir(path string, info os.FileInfo, err error) error {
	if info.IsDir() {
		if !strings.Contains(info.Name(), "_") && len(strings.Split(info.Name(), " ")) > 1 {
			os.Rename(PATH + info.Name(), PATH + strings.Replace(info.Name(), " ", "_", -1))
		}
	}
	if !info.IsDir() {
		fmt.Println(info.Name())
	}
	return nil
}
英文:

I fixed it by taking out if err != nil { log.Fatal(err) } in printDir function. It terminates with 1 error code because one of the folder is already renamed each time I run the program.

// Rename the folder name to format first_last.
// Then delete all files in each folder that are not jpg extension.
package main

import (
	"path/filepath"
	"log"
	"os"
	"strings"
	"fmt"
)

var PATH = "dir/dir/dir"

func main() {
	err := filepath.Walk(PATH, printDir)
	if err != nil {
		log.Fatal(err)
	}
}

func printDir(path string, info os.FileInfo, err error) error {
	if info.IsDir() {
		if !strings.Contains(info.Name(), "_") && len(strings.Split(info.Name(), " ")) > 1 {
			os.Rename(PATH + info.Name(), PATH + strings.Replace(info.Name(), " ", "_", -1))
		}
	}
	if !info.IsDir() {
		fmt.Println(info.Name())
	}
	return nil
}

huangapple
  • 本文由 发表于 2016年4月16日 08:13:06
  • 转载请务必保留本文链接:https://go.coder-hub.com/36658718.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定