2016-04-16 16 views
0

Ich versuche, nicht leere Ordner mit os.Rename() umzubenennen. Hier ist der Fehler: directory not empty. Ist es weg um die nicht leeren Ordner umzubenennen?Nicht-leeren Ordner umbenennen

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

Es hört sich so an, als könnte Go sich beschweren, da es ein nicht leeres Verzeichnis gibt, in das Sie dieses Verzeichnis verschieben möchten, und nicht, weil das Verzeichnis, das Sie verschieben, nicht leer ist. – user2357112

+0

@ user2357112 ja der Fehler ist ziemlich geradlinig. Das ist nicht das, was ich frage. – Bun

+1

Was möchten Sie mit dem Verzeichnis tun, das im Weg ist? Den Inhalt zusammenführen? Löschen Sie es und alles darin? – user2357112

Antwort

1

ich es fest von if err != nil { log.Fatal(err) } in printDir Funktion herausnehmen. Es endet mit 1 Fehlercode, weil einer der Ordner bereits jedes Mal umbenannt wird, wenn ich das Programm ausführe.

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