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 ^^!")
}
并发删除指定目录下指定扩展名的文件
最新推荐文章于 2019-08-19 09:52:35 发布