sharkdp/fd
Productivity & UtilitiesA fast, user-friendly command-line tool for searching files and directories, an alternative to find.
Project overview
fd searches entries in the filesystem and aims to replace the common cases of find with shorter, more intuitive commands and sensible defaults. It accepts regular expressions by default and glob patterns with -g, runs a parallel directory traversal, and colorizes results by file type like ls. The pattern is matched against the filename unless -p/--full-path is used.
Defaults are opinionated: hidden files and directories are skipped, and .gitignore/.fdignore/.ignore rules are respected. Both behaviors can be turned off. A single command can also execute a program for every match (-x/--exec, in parallel) or once with all matches as arguments (-X/--exec-batch), with placeholders such as {}, {/} and {.}. It fits terminal users, developers and anyone who regularly locates or batch-processes files.
Quick start
Install from a package manager or with Cargo:
cargo install fd-find
On Debian/Ubuntu the packaged binary is named fdfind; the README suggests linking it to fd if the name is free. Other options include Homebrew (brew install fd), Scoop, Chocolatey, Winget and prebuilt binaries from the release page.
Then run a single-argument search from the directory you want to scan:
fd netfl
This recursively finds entries whose names contain netfl and prints their paths. For a quick overview of all entries, run fd with no arguments or use a catch-all pattern such as . when specifying a directory. fd -h shows concise options and fd --help shows the detailed set.
Common refinements:
fd -e md # Markdown files
fd -e rs mod # Rust files whose names match "mod"
fd '^x.*rc$' # regular expression
fd -e zip -x unzip # run unzip for every archive, in parallel
fd -g 'test_*.py' -X vim # open matching files in one editor instance
Options may appear after the pattern and path. Arguments after -x or -X belong to the executed command, so place those options last when also passing a pattern or path. Placeholders may need shell quoting depending on the shell.
Constraints and behavior notes
- Building from source requires Rust 1.90.0 or later and
make. - Hidden entries and ignore-file matches are excluded by default. Use
-H,-I, or-u/--unrestrictedto search everything; searching the full path requires-p. -xruns commands in parallel; limit concurrency with-j/--threads(for example--threads=1for serial execution). Shell aliases and functions are not directly usable as-x/-Xcommands.- Destructive operations such as
-X rmshould be tried without the deletion step first. The README notes a race-condition caveat when recursively removing nested directories with the same name. - Released Linux binaries use jemalloc; preloading another allocator can crash
fd. Build withcargo build --release --no-default-featuresto avoid this. - Colorized output depends on the
LS_COLORSenvironment variable;NO_COLORis honored. - The project is distributed under MIT and Apache-2.0.
HotRepo's take
On the 2026-11-06 Rust daily list, fd gained 100 stars and recorded a best position of 13. Its Hacker News threads show recurring discussion rather than a one-off launch: the 2017 Show HN drew 456 points, followed by threads in 2019, 2022, 2024 and a 2025 thread with 718 points and 294 comments. Those comments include praise for the maintainer's terminal tools and complaints about flag differences between fd and rg, which points to the practical friction of adopting a new command alongside existing ones. The project's README includes its own benchmark comparing fd against find on one machine, with the explicit caveat that results may differ elsewhere.
Written by AI from the project's README, updated . The project's own docs are the source of truth.