重命名非空文件夹

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

Rename non-empty folder

问题

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

  1. package main
  2. import (
  3. "path/filepath"
  4. "log"
  5. "os"
  6. "strings"
  7. )
  8. var PATH = "dir/dir/"
  9. func main() {
  10. err := filepath.Walk(PATH, printDir)
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. }
  15. func printDir(path string, info os.FileInfo, err error) error {
  16. if err != nil {
  17. log.Fatal(err)
  18. }
  19. if info.IsDir() {
  20. arr := strings.Split(info.Name(), " ")
  21. if len(arr) > 1 {
  22. err := os.Rename(PATH + info.Name(), arr[0] + "_" + arr[1])
  23. if err != nil {
  24. log.Fatal(err)
  25. }
  26. }
  27. }
  28. return nil
  29. }
英文:

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?

  1. package main
  2. import (
  3. "path/filepath"
  4. "log"
  5. "os"
  6. "strings"
  7. )
  8. var PATH = "dir/dir/"
  9. /
  10. func main() {
  11. err := filepath.Walk(PATH, printDir)
  12. if err != nil {
  13. log.Fatal(err)
  14. }
  15. }
  16. func printDir(path string, info os.FileInfo, err error) error {
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. if info.IsDir() {
  21. arr := strings.Split(info.Name(), " ")
  22. if len(arr) > 1 {
  23. err := os.Rename(PATH + info.Name(), arr[0] + "_" + arr[1])
  24. if err != nil {
  25. log.Fatal(err)
  26. }
  27. }
  28. }
  29. return nil
  30. }

答案1

得分: 1

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

  1. // 将文件夹名称重命名为格式为first_last。
  2. // 然后删除每个文件夹中不是jpg扩展名的所有文件。
  3. package main
  4. import (
  5. "path/filepath"
  6. "log"
  7. "os"
  8. "strings"
  9. "fmt"
  10. )
  11. var PATH = "dir/dir/dir"
  12. func main() {
  13. err := filepath.Walk(PATH, printDir)
  14. if err != nil {
  15. log.Fatal(err)
  16. }
  17. }
  18. func printDir(path string, info os.FileInfo, err error) error {
  19. if info.IsDir() {
  20. if !strings.Contains(info.Name(), "_") && len(strings.Split(info.Name(), " ")) > 1 {
  21. os.Rename(PATH + info.Name(), PATH + strings.Replace(info.Name(), " ", "_", -1))
  22. }
  23. }
  24. if !info.IsDir() {
  25. fmt.Println(info.Name())
  26. }
  27. return nil
  28. }
英文:

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.

  1. // Rename the folder name to format first_last.
  2. // Then delete all files in each folder that are not jpg extension.
  3. package main
  4. import (
  5. "path/filepath"
  6. "log"
  7. "os"
  8. "strings"
  9. "fmt"
  10. )
  11. var PATH = "dir/dir/dir"
  12. func main() {
  13. err := filepath.Walk(PATH, printDir)
  14. if err != nil {
  15. log.Fatal(err)
  16. }
  17. }
  18. func printDir(path string, info os.FileInfo, err error) error {
  19. if info.IsDir() {
  20. if !strings.Contains(info.Name(), "_") && len(strings.Split(info.Name(), " ")) > 1 {
  21. os.Rename(PATH + info.Name(), PATH + strings.Replace(info.Name(), " ", "_", -1))
  22. }
  23. }
  24. if !info.IsDir() {
  25. fmt.Println(info.Name())
  26. }
  27. return nil
  28. }

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:

确定