// the find
jhspetersson/fselect
Find files with SQL-like queries
fselect replaces `find`/`ls` with a SQL-like query language for locating files by metadata — size, dates, permissions, EXIF, audio tags, hashes, MIME type, xattrs, ACLs, you name it. It's for people who already think in SQL and are tired of memorizing find's flag soup, especially on machines where they do a lot of ad-hoc file hunting.
The metadata coverage is genuinely wide: EXIF, audio tags across eight formats, POSIX ACLs, Linux capabilities, xattrs, file hashes — most find alternatives stop at name/size/date. Subqueries and aggregate functions (GROUP BY/HAVING, MIN/MAX/COUNT) go well beyond what find's expression syntax can do. Optional plocate/Everything index backends are a smart escape hatch for people who need fast search on large trees instead of a cold walk every time. Packaging is thorough — deb, rpm, AUR, winget, choco, scoop, brew, MacPorts, static musl builds — so install friction is low on every platform.
The grammar is a hand-rolled lexer/parser (lexer.rs, parser.rs, expr.rs), not real SQL, so you get SQL-shaped syntax with its own quirks — manual quote-escaping in the shell, backtick paths, non-standard operators like `gte`/`lt` mixed with `>=`/`<`. No fuzz testing is visible for that parser, and hand-rolled query parsers are a classic spot for crashes on malformed input. Without an index backend it's a plain directory walk, and there's no benchmark data anywhere comparing it to fd or plain find, so you don't know what the performance tax is for all this metadata-handling code sitting in the hot path. It's a single monolithic binary with audio/video/EXIF/git/ACL handling all compiled in by default rather than gated behind features, so you pay in binary size and dependency surface even if you only ever query by name and size.