Switch language
zh
Switch theme
Light

删除文件夹中的node_modules子文件夹

package main

import (
	"fmt"
	"io"
	"io/fs"
	"os"
	"path"
	"path/filepath"
)

func main() {
	if len(os.Args) == 1 {
		panic("Enter a file name")
	}
	src := os.Args[1]

	var pathList []string

	err := filepath.Walk(src, func(path string, info fs.FileInfo, err error) error {

		if err != nil {
			return err
		}

		if info.IsDir() && info.Name() == "node_modules" {
			return filepath.SkipDir
		}

		if info.IsDir() {
			return nil
		}

		path = filepath.ToSlash(path)
		pathList = append(pathList, path)

		return nil
	})

	if err != nil {
		fmt.Printf("filepath.Walk() returned %v\n", err)
		panic(err)
	}

	for index, path := range pathList {
		fmt.Println(index+1, "/", len(pathList), ":  ", path)

		err = customCopy(path)
		if err != nil {
			panic(err)
		}
	}

}

func customCopy(src string) error {
	dst := "./bak-" + src

	dir := path.Dir(dst)

	_, err := os.Stat(dir)
	if err != nil {
		if os.IsNotExist(err) {
			err = os.MkdirAll(dir, 0777)
			if err != nil {
				panic(err)
			}
		} else {
			panic(err)
		}
	}

	source, err := os.Open(src)
	if err != nil {
		return err
	}
	defer source.Close()

	destination, err := os.Create(dst)
	if err != nil {
		return err
	}
	defer destination.Close()

	_, err = io.Copy(destination, source)

	return err
}
🍀