One search tool to rule your filesystem.
Every Linux user meets find eventually — and most of us find it awkward. Its flags are cryptic (-iname, -type f, -print0), the syntax trips up even experienced users, and the defaults are noisy.
Enter fd, a Rust rewrite by sharkdp that promises to be a "simple, fast and user-friendly alternative to find." It's one of the most popular new command-line tools on GitHub, with more than 40,000 stars and an active maintainer community. If you've ever fumbled through a file search, fd is worth a look.
What makes fd different
The core idea is sensible defaults on purpose. Where find makes you spell everything out, fd guesses what you probably meant:
- Simple syntax.
fd PATTERNreplaces the clunkyfind -iname '*PATTERN*'. No wildcards required — fd treats your pattern as a regex by default and matches across the tree. - Smart case. Searches are case-insensitive by default, but fd flips to case-sensitive the moment your pattern contains an uppercase letter. No flag juggling.
- Quiet by default. fd skips hidden files and folders, and respects your
.gitignore, out of the box. That means no more wading through.git/noise or build artifacts. - Fast. fd uses parallelized directory traversal, so it plows through large trees much faster than the single-threaded
find.
Getting started
Installing fd is simple:
- Ubuntu / Debian:
sudo apt install fd-find(the binary is namedfdfind, because the namefdwas already taken by another package) - macOS:
brew install fd - From source (needs Rust 1.90+):
cargo install fd-find
Once it's on your system, drop it straight into use:
fd PATTERN # search the current directory
fd config -t f # only regular files
fd config -t d # only directories
fd config -t l # only symbolic links
fd -g '*.rs' # glob pattern instead of regex
The -t flag accepts the same file types you already know from ls: f for files, d for directories, and l for symlinks.
Chaining it with other tools
fd really shines when you pipe it into a command. Because it's built for automation, it supports null-delimited output, so filenames with spaces or weird characters don't break your pipeline:
fd -0 -e log | xargs -0 rm # delete all .log files
fd -e jpg -0 | xargs -0 convert # batch-process images
fd --exec echo {} # run a command per match
The -0 flag outputs filenames separated by null bytes, and xargs -0 consumes them safely — a cleaner replacement for find's -print0 incantation.
A note on the version
As of this writing, fd is at v10.5.0 (released August 26, 2026). Version 10.5.0 added options like --exact for whole-filename matching, while v10.4.0 had raised the minimum Rust version to 1.90. The project moves steadily — check the release notes for the latest.
Should you switch?
fd isn't a total find replacement — it deliberately leaves out some of find's exotic power. But for the 80% of everyday use cases, it's faster, friendlier, and far less error-prone. Try fd for a week alias'd over find; odds are you won't look back. Your fingers will thank you.
