fd: A simple, fast and user-friendly alternative to 'find'
Rust CLI ecosystem & support
- Many comments praise
fdalong with companion tools (bat,hyperfine,hexyl,numbat) as daily drivers and major quality-of-life upgrades for the terminal. - Several people advocate financially sponsoring authors of such utilities; Terminal Trove is mentioned as a curated index and sponsor of various terminal tools.
- Astral (maker of
uv) is noted as employing multiple well-known Rust CLI authors; their funding model is VC-backed with future plans for commercial services, but details are still unclear.
Ergonomics vs traditional tools
- A recurring theme: users “never really got”
findsyntax and instead usedfind . | grep ...or Midnight Commander;fd’s simple interface and sane defaults made them finally adopt a file-finder. - Others resist switching because they already memorized POSIX/GNU tools and don’t want to learn slightly different flags for similar utilities (especially
fdvsfind,rgvsgrep). - Some explicitly like
bfs(breadth‑firstfind-like) orlocate/mdfindwhen they want global/system-wide or indexed search instead.
Filename encoding & Unicode edge cases
- A detailed subthread dissects how
fdhandles non‑UTF‑8 filenames:- Example: invalid UTF‑8 in an extension causes
fd -eto error, whilefindstill works on raw bytes. - Clarification:
fdrequires UTF‑8 for some convenience flags (like--extension), but can still match arbitrary bytes through regex with Unicode disabled and\xHHescapes.
- Example: invalid UTF‑8 in an extension causes
- Broader debate on whether tools should assume UTF‑8:
- One side: filenames “aren’t text,” POSIX allows any byte except NUL and
/, and archaeology/legacy drives and mojibake are real use cases. - Other side: non‑UTF‑8 paths already break lots of software; enforcing UTF‑8 (possibly via mount options) would improve security and simplify tooling.
- One side: filenames “aren’t text,” POSIX allows any byte except NUL and
- Case‑insensitive matching:
fd(via its regex engine) uses Unicode simple case folding, which works beyond English but not for locale‑specific rules (e.g., Turkishi/İ).
Defaults, ignores, and completeness
fd’s default to respect.gitignoreand skip hidden/ignored directories is loved by many (“search what I care about”) and disliked by others who expectfind‑style “search absolutely everything.”- The
-u/-uuuflags (fd/rg) to include ignored/hidden files are frequently mentioned, but some users say they never remember them and fall back tofind. - Some worry about divergence and misaligned flags between
fdandrg, wishing their options were more consistent.
Performance and parallelism
- Benchmarks in one comment show
fdbeing roughly an order of magnitude faster thanfindwhen counting.jpgfiles under$HOME, though returning slightly fewer results due to default ignores. - Parallel execution (
-x/--execrunning in parallel) is highlighted as a killer feature: easily applying transformations to many files without needingxargsor GNUparallel. - Discussion notes that on modern NVMe systems CPU and traversal can be the bottleneck, so parallelism materially helps; on spinning disks the gain may be smaller.
Unix philosophy, languages, and adoption
- Some view many “Rust rewrites” as unnecessary “blazing fast” vanity projects;
fdis seen as a counterexample that genuinely improves UX and capabilities. - Debate over the Unix “do one thing well” ideal:
- Critics argue tools like
ripgrepimproperly mergefindandgreproles and that newer CLIs chase convenience over composability. - Others respond that even classic tools violate strict minimalism; the Unix philosophy is a heuristic for better UX, not a sacred rule, and modern workflows benefit from integrated features.
- Critics argue tools like
- Rust’s role:
- Several commenters say “written in Rust” is a rough proxy for performance, safety, and care, but others push back against Rust‑centric marketing and emphasize that language is secondary to design.
- Go is mentioned as also good for CLIs (easy to write, fast startup), while Python and Java are criticized for slower startup or heavy runtimes for small tools.
- uutils (Rust reimplementations of coreutils) and Ubuntu’s plan to adopt them are cited as an example of language changes that are invisible to users when behavior stays compatible.
Related tools and ecosystems
- Numerous adjacent tools appear:
ripgrep,fzf,bfs,xsvand its forks (qsv,xan),duckdb,ugrep,yazi,lf,zellij,Everythingon Windows, and shells likenushellandmurex. - Several commenters describe their “standard toolkits” (fd/rg/bat/fzf/htop/etc.) installed on every machine, and suggest Nix/home‑manager or mise to standardize installation across systems.