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