并发删除指定目录下指定扩展名的文件

xiaoxiao2021-02-28  62

package main import ( "flag" "fmt" "os" "path/filepath" "strconv" "strings" ) //获取指定目录及所有子目录下的所有文件,可以匹配后缀过滤。 func WalkDir(dirPth, suffix string) (files []string, err error) { files = make([]string, 0, 500) suffix = strings.ToUpper(suffix) err = filepath.Walk(dirPth, func(filename string, fi os.FileInfo, err error) error { if fi.IsDir() { return nil } if strings.HasSuffix(strings.ToUpper(fi.Name()), suffix) { files = append(files, filename) } return nil }) return files, err } func main() { path := flag.String("path", "./", "目录路径") suffix := flag.String("suffix", ".sql", "文件扩展名") flag.Usage = func() { fmt.Fprintf(os.Stderr, "功能:%s!\n", "删除指定目录下的指定扩展名的") fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) flag.PrintDefaults() fmt.Fprintln(os.Stderr, " -h : show help usage") } flag.Parse() files, err := WalkDir(*path, *suffix) if err != nil { fmt.Println(files, err) return } filesnum := len(files) fmt.Println(strings.Join(files, "\n")) fmt.Println("文件总数:" + strconv.Itoa(filesnum)) done := make(chan int, filesnum) //这里一定要一个中间变量,不然并发执行的时候,可能删除的都是最后一个文件 for _, v := range files { filename := v go func() { os.Remove(filename) done <- 1 }() } for i := 0; i < filesnum; i++ { <-done } fmt.Println("finish ^^!") }
转载请注明原文地址: https://www.6miu.com/read-48193.html

最新回复(0)