fd: A simple, fast and user-friendly alternative to 'find'

Rust CLI ecosystem & support

  • Many comments praise fd along 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” find syntax and instead used find . | 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 fd vs find, rg vs grep).
  • Some explicitly like bfs (breadth‑first find-like) or locate/mdfind when they want global/system-wide or indexed search instead.

Filename encoding & Unicode edge cases

  • A detailed subthread dissects how fd handles non‑UTF‑8 filenames:
    • Example: invalid UTF‑8 in an extension causes fd -e to error, while find still works on raw bytes.
    • Clarification: fd requires UTF‑8 for some convenience flags (like --extension), but can still match arbitrary bytes through regex with Unicode disabled and \xHH escapes.
  • 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.
  • 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., Turkish i/İ).

Defaults, ignores, and completeness

  • fd’s default to respect .gitignore and skip hidden/ignored directories is loved by many (“search what I care about”) and disliked by others who expect find‑style “search absolutely everything.”
  • The -u / -uuu flags (fd/rg) to include ignored/hidden files are frequently mentioned, but some users say they never remember them and fall back to find.
  • Some worry about divergence and misaligned flags between fd and rg, wishing their options were more consistent.

Performance and parallelism

  • Benchmarks in one comment show fd being roughly an order of magnitude faster than find when counting .jpg files under $HOME, though returning slightly fewer results due to default ignores.
  • Parallel execution (-x/--exec running in parallel) is highlighted as a killer feature: easily applying transformations to many files without needing xargs or GNU parallel.
  • 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; fd is seen as a counterexample that genuinely improves UX and capabilities.
  • Debate over the Unix “do one thing well” ideal:
    • Critics argue tools like ripgrep improperly merge find and grep roles 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.
  • 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, xsv and its forks (qsv, xan), duckdb, ugrep, yazi, lf, zellij, Everything on Windows, and shells like nushell and murex.
  • 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.