Skip to main content

What is Fd?

fd is a fast, user-friendly alternative to find. Written in Rust by David Peter, it is designed for the day-to-day work of developers navigating modern project trees.

Mental model: Think of fd as find . -name "*pattern*" with sensible defaults already applied — hidden directories skipped, .gitignore respected, output colorized, searches parallelized.

Side-by-Side Comparison​

The single most common use of find in development:

# find way — 7 tokens, requires quoting, searches node_modules
find . -type f -name "*config*"

# fd way — 2 tokens, smart defaults, skips node_modules automatically
fd config

What fd Does by Default That find Doesn't​

Behaviourfindfd
Respects .gitignoreNoYes
Skips hidden filesNoYes
Parallel traversalNoYes
Regex pattern (default)No (glob)Yes
Smart case sensitivityNoYes
Colorized outputNoYes

When to Use fd vs. find​

Use fd when:

  • You are a developer navigating a Git repository
  • You want to list, move, or act on source code files
  • You want to exclude .git, node_modules, __pycache__ automatically

Use find when:

  • You are writing a shell script deployed to servers
  • You need metadata filters: -perm, -user, -nouser, SUID bits
  • You need POSIX portability (Alpine containers, minimal Docker images)
  • You are doing system audits on files fd would ignore by default

Quick Start​

# Install
sudo apt install fd-find # Ubuntu/Debian (binary: fdfind, see troubleshooting)
brew install fd # macOS
cargo install fd-find # via Rust toolchain

# Basic usage
fd config # find files matching "config"
fd -t f -e py # all .py files
fd -H .env # find hidden .env files
fd -u "build.gradle" # search inside ignored directories too