main.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "io/fs"
  6. "os"
  7. "path/filepath"
  8. )
  9. var help bool
  10. var recurse bool
  11. var force bool
  12. var rf bool
  13. func main() {
  14. flag.BoolVar(&help, "h", false, "print help")
  15. flag.BoolVar(&recurse, "r", false, "remove directories and their contents recursively")
  16. flag.BoolVar(&force, "f", false, "ignore nonexistent files and arguments, never prompt")
  17. flag.BoolVar(&rf, "rf", false, "-r and -f")
  18. flag.Parse()
  19. if help {
  20. flag.PrintDefaults()
  21. return
  22. }
  23. if rf {
  24. recurse = true
  25. force = true
  26. }
  27. for _, iv := range flag.Args() {
  28. list, err := filepath.Glob(iv)
  29. if err != nil {
  30. fmt.Println(err.Error())
  31. if !force {
  32. return
  33. }
  34. }
  35. for _, jv := range list {
  36. if recurse {
  37. err := filepath.Walk(jv, func(path string, info fs.FileInfo, err error) error {
  38. if err != nil {
  39. fmt.Println(err.Error())
  40. if !force {
  41. return err
  42. }
  43. }
  44. errx := os.Remove(path)
  45. if errx != nil {
  46. fmt.Println(errx.Error())
  47. if !force {
  48. return errx
  49. }
  50. }
  51. return nil
  52. })
  53. if err != nil {
  54. fmt.Println(err.Error())
  55. if !force {
  56. return
  57. }
  58. }
  59. } else {
  60. err := os.Remove(jv)
  61. if err != nil {
  62. fmt.Println(err.Error())
  63. if !force {
  64. return
  65. }
  66. }
  67. }
  68. }
  69. }
  70. }