Luke Oliff.

fd 10.5 Is the find Replacement Worth Memorizing

·TIL·3 min read·Luke Oliff
TL;DR

fd 10.5.0, the first release since March 2026, adds --ignore-parent and --exact plus terminal escape-sequence hardening. Here are the flags I actually memorized against their find equivalents.

fd 10.5.0 shipped on 26 August 2026, its first release since March, and it settles the fd find replacement question: this is the version worth committing to memory. Two new flags, --ignore-parent and --exact, plus a security fix that sanitises control and bidirectional characters in filenames when output goes to a terminal (release notes). That last one blocks escape-sequence injection, where a crafted filename could smuggle terminal control codes into your session.

I’ve used fd for years. What changed here is small, but --exact in particular closes a gap I used to work around with anchors and quotes.

Why fd beats find for daily use

The pitch is that fd does what you meant. find . -name '*.log' -not -path './node_modules/*' becomes fd -e log. It skips hidden files and .gitignore’d paths by default, runs searches in parallel, and takes a regex without you escaping half of it.

The trade is that those defaults differ from find. If you want everything, you ask for it with --hidden and --no-ignore. That’s the right default for interactive work and the wrong one to assume in a script you copied off the internet.

The flags worth memorizing

A handful earn their keep against the find equivalents:

  • fd -e ts finds by extension, the replacement for find -name '*.ts'.
  • fd -H includes hidden files (find shows them by default, fd doesn’t).
  • fd -t f and fd -t d filter to files or directories, like find -type f.
  • fd -x cmd {} runs a command per match, the parallel cousin of find -exec.
  • fd -X cmd batches all matches into one invocation, like find ... -exec cmd {} +.
  • fd --exact foo matches the whole filename literally, no substring, no regex. New in 10.5.
  • fd --ignore-parent re-enables parent .gitignore handling when a config turned it off. Also new in 10.5.

--exact is the one I keep reaching for now. Before it, matching a file called exactly test meant fd '^test$' and remembering the anchors. fd --exact test reads like what it does.

The security fix nobody asked about but everyone needed

The escape-sequence hardening matters more than the new flags, even if it’s less fun. Any tool that prints filenames to a terminal can be tricked by a filename containing raw escape codes, which can rewrite your prompt or hide text. fd 10.5.0 now strips those control and bidi override characters when the output is a terminal, and leaves them alone when you’re piping to another program. It also stopped accepting placeholders as the executable for --exec-batch while still allowing them for --exec.

If you’re on an older fd, this is reason enough to bump. The rest is just nicer ergonomics on a tool that was already the one I reach for.