DEV Community

@lukeocodes 🕹👨‍💻
@lukeocodes 🕹👨‍💻

Posted on Originally published at lukeocodes.dev on

fd 10.5 Is the find Replacement Worth Memorizing

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.

Top comments (0)