2016-04-16 115 views
0

我試圖用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 
} 
+3

這聽起來像Go可能會抱怨,因爲有一個非空目錄,您要將此目錄移動到,而不是因爲您移動的目錄非空。 – user2357112

+0

@ user2357112是的,錯誤非常簡單。那不是我要問的。 – Bun

+1

你想用這個目錄來做什麼?合併內容?刪除它和裏面的一切? – user2357112

回答

1

我修復了if err != nil { log.Fatal(err) }printDir函數中的問題。它終止於1個錯誤代碼,因爲每次運行該程序時,其中一個文件夾已被重命名。

// 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 
}