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

原文地址:https://www.cnblogs.com/oloroso/p/12853398.html