Go 递归删除空目录


这个可以通过shell脚本来达到目的。

find -type d -empty|xrags rmdir

写这个是因为有个 windows 的服务器,又不熟悉批处理和powershell脚本,就写了这么个玩意,放在这里做个记录。

package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"path"
)

func findEmptyFolder(dirname string) (emptys []string, err error) {
	// Golang学习 - io/ioutil 包
	// https://www.cnblogs.com/golove/p/3278444.html

	files, err := ioutil.ReadDir(dirname)
	if err != nil {
		return nil, err
	}
	// 判断底下是否有文件
	if len(files) == 0 {
		return []string{dirname}, nil
	}

	for _, file := range files {
		if file.IsDir() {
			edirs, err := findEmptyFolder(path.Join(dirname, file.Name()))
			if err != nil {
				return nil, err
			}
			if edirs != nil {
				emptys = append(emptys, edirs...)
			}
		}
	}
	return emptys, nil
}

func main() {
	if len(os.Args) != 2 {
		fmt.Println("Usage:", os.Args[0], "起始路径")
		return
	}
	emptys, err := findEmptyFolder(os.Args[1])
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	for _, dir := range emptys {
		if err := os.Remove(dir); err != nil {
			fmt.Println("错误:", err.Error())
		} else {
			fmt.Println("删除成功:", dir)
		}
	}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM