Browse Source

Ver 0.1.0 2021-08-17 22:10

zry 2 years ago
parent
commit
5ca77c6ecc
3 changed files with 79 additions and 1 deletions
  1. 3 1
      README.md
  2. 3 0
      go.mod
  3. 73 0
      main.go

+ 3 - 1
README.md

@@ -1,3 +1,5 @@
 # rm4win
 
-simple unix rm implementation for windows. (Using for makefiles)
+simple unix rm implementation for windows. (Using for makefiles)
+
+**WARNING:** Some behaviors are not same as UNIX `rm` command.

+ 3 - 0
go.mod

@@ -0,0 +1,3 @@
+module git.swzry.com/zry/rm4win
+
+go 1.16

+ 73 - 0
main.go

@@ -0,0 +1,73 @@
+package main
+
+import (
+	"flag"
+	"fmt"
+	"io/fs"
+	"os"
+	"path/filepath"
+)
+
+var help bool
+var recurse bool
+var force bool
+var rf bool
+
+func main() {
+	flag.BoolVar(&help, "h", false, "print help")
+	flag.BoolVar(&recurse, "r", false, "remove directories and their contents recursively")
+	flag.BoolVar(&force, "f", false, "ignore nonexistent files and arguments, never prompt")
+	flag.BoolVar(&rf, "rf", false, "-r and -f")
+	flag.Parse()
+	if help {
+		flag.PrintDefaults()
+		return
+	}
+	if rf {
+		recurse = true
+		force = true
+	}
+	for _, iv := range flag.Args() {
+		list, err := filepath.Glob(iv)
+		if err != nil {
+			fmt.Println(err.Error())
+			if !force {
+				return
+			}
+		}
+		for _, jv := range list {
+			if recurse {
+				err := filepath.Walk(jv, func(path string, info fs.FileInfo, err error) error {
+					if err != nil {
+						fmt.Println(err.Error())
+						if !force {
+							return err
+						}
+					}
+					errx := os.Remove(path)
+					if errx != nil {
+						fmt.Println(errx.Error())
+						if !force {
+							return errx
+						}
+					}
+					return nil
+				})
+				if err != nil {
+					fmt.Println(err.Error())
+					if !force {
+						return
+					}
+				}
+			} else {
+				err := os.Remove(jv)
+				if err != nil {
+					fmt.Println(err.Error())
+					if !force {
+						return
+					}
+				}
+			}
+		}
+	}
+}