英文:
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
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论