find is now working

master
Zed A. Shaw 6 days ago
parent 6325d7fef6
commit 509750b2ab
  1. 2
      find/.gitignore
  2. 4
      find/Makefile
  3. 3
      find/go.mod
  4. 47
      find/main.go

2
find/.gitignore vendored

@ -0,0 +1,2 @@
find
find.exe

@ -0,0 +1,4 @@
build:
go build .

@ -0,0 +1,3 @@
module lcthw.dev/go/go-coreutils/find
go 1.25.3

@ -0,0 +1,47 @@
package main
import (
"fmt"
"flag"
"path/filepath"
"regexp"
"log"
"io/fs"
)
type Opts struct {
Name string
Type string
Print bool
}
func main() {
var opts Opts
flag.StringVar(&opts.Name, "name", "", "regex of file")
flag.StringVar(&opts.Type, "type", "f", "type to find")
flag.Parse()
re, err := regexp.Compile(opts.Name)
if err != nil { log.Fatal(err) }
if flag.NArg() == 0 {
log.Fatal("USAGE: find -name <regex> [-type d/f] <dir> [dir dir]")
}
for _, start := range flag.Args() {
filepath.WalkDir(start, func (path string, d fs.DirEntry, err error) error {
if re.MatchString(path) && opts.Print {
if opts.Type == "" {
fmt.Println(path)
} else if d.IsDir() && opts.Type == "d" {
fmt.Println(path)
} else if !d.IsDir() && opts.Type == "f" {
fmt.Println(path)
}
}
return nil
})
}
}
Loading…
Cancel
Save