Documentation
¶
Overview ¶
Package gofd is a pure-Go port of the `fd` file finder. It exposes a friendly SDK for embedding fd-style search in Go programs, while cmd/fd provides a CLI compatible with the original tool.
Typical SDK usage:
import gofd "github.com/startvibecoding/go-fd"
results, err := gofd.Find(context.Background(), gofd.Options{
Pattern: "\\.go$",
Paths: []string{"."},
})
Index ¶
- Constants
- func Compile(opts Options) (*finder.Finder, []string, error)
- func Find(ctx context.Context, opts Options) ([]string, error)
- func Stream(ctx context.Context, opts Options) (<-chan Result, <-chan error, error)
- func ValidateSearchPaths(opts Options) ([]string, []string, error)
- type ExitCode
- type Options
- type Result
Examples ¶
Constants ¶
const ( ExitSuccess = finder.ExitSuccess ExitGeneralError = finder.ExitGeneralError )
Process exit codes.
Variables ¶
This section is empty.
Functions ¶
func Find ¶
Find runs a search and returns matching paths sorted lexicographically.
Example ¶
package main
import (
"context"
"fmt"
"os"
"path/filepath"
"sort"
gofd "github.com/startvibecoding/go-fd"
)
func main() {
dir, err := os.MkdirTemp("", "gofd-example-")
if err != nil {
panic(err)
}
defer os.RemoveAll(dir)
for _, name := range []string{"main.go", "README.md", "internal/util.go"} {
path := filepath.Join(dir, filepath.FromSlash(name))
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
panic(err)
}
if err := os.WriteFile(path, []byte(""), 0o644); err != nil {
panic(err)
}
}
paths, err := gofd.Find(context.Background(), gofd.Options{
Pattern: `\.go$`,
Paths: []string{dir},
})
if err != nil {
panic(err)
}
var rels []string
for _, path := range paths {
rel, err := filepath.Rel(dir, path)
if err != nil {
panic(err)
}
rels = append(rels, filepath.ToSlash(rel))
}
sort.Strings(rels)
for _, rel := range rels {
fmt.Println(rel)
}
}
Output: internal/util.go main.go
func Stream ¶
Stream runs a search and streams results over a channel.
Example ¶
package main
import (
"context"
"fmt"
"os"
"path/filepath"
gofd "github.com/startvibecoding/go-fd"
)
func main() {
dir, err := os.MkdirTemp("", "gofd-example-")
if err != nil {
panic(err)
}
defer os.RemoveAll(dir)
for _, name := range []string{"main.go", "util.go"} {
if err := os.WriteFile(filepath.Join(dir, name), []byte(""), 0o644); err != nil {
panic(err)
}
}
results, errs, err := gofd.Stream(context.Background(), gofd.Options{
Pattern: `\.go$`,
Paths: []string{dir},
})
if err != nil {
panic(err)
}
count := 0
for range results {
count++
}
for err := range errs {
if err != nil {
panic(err)
}
}
fmt.Println(count)
}
Output: 2
func ValidateSearchPaths ¶ added in v0.0.4
ValidateSearchPaths resolves valid search roots and reports invalid ones without printing anything. It is primarily useful for callers that want to preserve CLI-style diagnostics while keeping SDK operations silent.
Types ¶
type Options ¶
type Options struct {
// Pattern is the primary search pattern. Empty matches everything.
Pattern string
// Exprs are additional patterns that must all match (fd's --and).
Exprs []string
// Paths are the search roots. Defaults to the current directory.
Paths []string
// Pattern interpretation.
Glob bool // treat patterns as globs
FixedStrings bool // treat patterns as literal substrings
Exact bool // match the whole filename literally
// Case handling. By default smart-case is used.
CaseSensitive bool
IgnoreCase bool
// Path matching.
FullPath bool // match against the full path, not just the file name
AbsolutePath bool // emit absolute paths
// Ignore handling.
Hidden bool // include hidden files
NoIgnore bool // disable all ignore files
NoIgnoreVcs bool // disable .gitignore only
NoIgnoreParent bool // disable ignore files in parent directories
NoGlobalIgnore bool // disable the global ignore file
NoRequireGit bool // respect gitignore even outside a git repo
Unrestricted bool // alias for NoIgnore + Hidden
// Traversal.
FollowLinks bool
OneFileSystem bool
MaxDepth int // 0 = unlimited
MinDepth int // 0 = none
ExactDepth int // 0 = unset; sets both min and max
Prune bool
Threads int // 0 = auto
// Filters.
Types []string // f,d,l,x,e,s,p,c,b (or long names)
Extensions []string
Exclude []string
Sizes []string // e.g. "+1m", "-500k"
ChangedWithin string
ChangedBefore string
Owner string // [user|uid][:group|gid]
IgnoreFiles []string
IgnoreContain []string
// Output.
NullSeparator bool
PathSeparator string
MaxResults int // 0 = unlimited
Format string
StripCwdPrefix *bool // nil = auto
// Color: "auto", "always", "never".
Color string
Hyperlink string // "auto", "always", "never"
// Command execution (mutually exclusive with Format/output).
Exec []string // -x command template (terminated logically by caller)
ExecBatch []string // -X command template
BatchSize int
ShowErrors bool
Quiet bool
// ListDetails emulates --list-details (ls -l style listing).
ListDetails bool
}
Options is the high-level, user-facing configuration for a search. Sensible fd defaults (smart case, respecting ignore files, skipping hidden entries) are applied automatically.
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
fd
command
Command fd is a Go port of the `fd` file finder.
|
Command fd is a Go port of the `fd` file finder. |
|
pkg
|
|
|
exec
Package exec implements fd's command execution feature (-x/--exec and -X/--exec-batch), including placeholder substitution and batching.
|
Package exec implements fd's command execution feature (-x/--exec and -X/--exec-batch), including placeholder substitution and batching. |
|
filter
Package filter implements the result filters used by fd: size, modification time and (on unix) ownership constraints.
|
Package filter implements the result filters used by fd: size, modification time and (on unix) ownership constraints. |
|
finder
Package finder is the core engine of go-fd.
|
Package finder is the core engine of go-fd. |
|
format
Package format implements fd's format/exec placeholder templates, supporting the tokens {}, {/}, {//}, {.}, {/.} and literal brace escaping ({{ }}).
|
Package format implements fd's format/exec placeholder templates, supporting the tokens {}, {/}, {//}, {.}, {/.} and literal brace escaping ({{ }}). |
|
glob
Package glob translates shell-style glob patterns into Go regular expressions.
|
Package glob translates shell-style glob patterns into Go regular expressions. |
|
ignore
Package ignore implements gitignore-style pattern matching used by fd to honor .gitignore, .ignore, .fdignore and custom ignore files.
|
Package ignore implements gitignore-style pattern matching used by fd to honor .gitignore, .ignore, .fdignore and custom ignore files. |