A
.gitignore-aware file discovery and classification suite that locates files by content format, shebang, and MIME tag for automated linting, formatting, and CI pipelines.
1. Why findfmt?
Unlike traditional find or globbing tools that rely strictly on file extensions, findfmt:
- Understands file content: Identifies format by content, shebang (
#!/usr/bin/env python3), and MIME types using theidentifyengine. - Respects Git: Traverses trees hierarchically while pruning
.gitignoreand.git/info/excludepaths early before descending into large directories (e.g.node_modules/,.venv/). - Deterministic: Always returns clean, relative, deterministically sorted paths optimized for subshells, xargs, and automation.
2. Installation
2.1. With uv (Recommended)
Run directly with uvx:
uvx findfmt --help
Install globally:
uv tool install findfmt
Or add to your project:
uv add findfmt
2.2. With pip
pip install findfmt
2.3. With Docker / Container
docker pull ghcr.io/bdperkin/findfmt:latest
docker run --rm -v "$(pwd)":/workspace -w /workspace ghcr.io/bdperkin/findfmt:latest -t python
3. Usage
3.1. Locate Files by Tag / Format
# Locate all Python files
findfmt -t python
# Locate all YAML and JSON files
findfmt -t yaml,json
# Locate shell scripts
findfmt -t shell
3.2. Shebang Filtering
# Locate files with bash shebang
findfmt --shebang bash
# Locate scripts executing with python
findfmt --shebang python
3.3. Pipe Safely to Linters and Tools
Use -0 for NUL-delimited output with xargs -0:
# Format discovered Python files
findfmt -t python -0 | xargs -0 ruff format
# Lint shell scripts with shellcheck
findfmt -t shell -0 | xargs -r -0 shellcheck
3.4. Inspect Tags & Summaries
# Print matched files and their classification tags
findfmt -l -t python
# Print summary statistics to stderr
findfmt -s
3.5. Command Aliases & Entry Points
findfmt installs dedicated executable wrappers for frequent operations:
| Command | Equivalent To | Description |
|---|---|---|
findfiles [PATHS...] |
findfmt --hidden |
Traverse all files including hidden files |
findfilemime [PATHS...] |
findfmt --hidden --list-tags |
List files with MIME & format tags |
findfilefmt [TAG] [PATHS...] |
findfmt --hidden --tag [TAG] |
Filter files by format tag |
findshebang [INTERPRETER] [PATHS...] |
findfmt --hidden --shebang [INTERPRETER] |
Filter scripts by shebang pattern |
findfmt0 [PATHS...] |
findfmt --hidden --print0 |
NUL-delimited output for xargs -0 |
findsummary [PATHS...] |
findfmt --hidden --summary |
Output summary statistics to stderr |
4. CLI Options
| Flag | Description |
|---|---|
-t, --tag, --type TAG |
Match files containing specified tag(s) |
-e, --exclude, --exclude-tag TAG |
Exclude files containing specified tag(s) |
--all-tags / --no-all-tags |
Require match against all include tags (AND logic) |
--shebang INTERPRETER |
Match shebang interpreter name or pattern |
--no-ignore / --ignore |
Toggle respecting .gitignore files |
--hidden / --no-hidden |
Toggle inspecting hidden files and directories |
-L, --follow-symlinks / --no-follow-symlinks |
Toggle following filesystem symbolic links |
-0, --print0 / --no-print0 |
NUL-delimited output for xargs -0 |
-l, --list-tags / --no-list-tags |
Toggle printing tags alongside file paths |
-s, --summary / --no-summary |
Toggle summary frequency statistics to stderr |
--absolute / --no-absolute |
Toggle absolute vs relative output paths |
--known-tags |
List all supported classification tags and exit |
-v, -V, --version |
Display version (--verbose adds runtime diagnostics) |
--diagnostics |
Display runtime environment diagnostics and exit |
--help-all |
Display comprehensive manual, env vars, and exit codes |
-- [PATHS...] |
POSIX terminator: treat following tokens strictly as paths |
5. Development & Testing
This project enforces 100% test coverage and strict type checking:
# Clone the repository
git clone https://github.com/bdperkin/findfmt.git
cd findfmt
# Install dependencies with uv
uv sync --all-groups
# Run tests and verify 100% coverage
uv run pytest
# Run linting and typing
uv run ruff check
uv run ty check
# Run full verification suite
uv run python tools/verify_quality.py
6. Governance & Community
7. License
MIT License © 2026 Brandon Perkins.
Metadata
Release files for findfmt 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| findfmt-0.2.0.tar.gz | 76.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| findfmt-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.7 kB
Release files / findfmt-0.2.0.tar.gz
| Download URL | findfmt-0.2.0.tar.gz |
|---|---|
| Size | 76.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
00284d40b5a08cfc90e1dc60ec6eb349af4ca12677192476a159c16513a22ba8
|
|
BLAKE2b-256 checksum How to use checksums |
b236c53c025b45f3c1090f64601e3620b6b77a7aa77ac3cb4778a1638ef108e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency logRelease files / findfmt-0.2.0-py3-none-any.whl
| Download URL | findfmt-0.2.0-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
01e70e4c18b67a98d1c97c6cc3a70331ca1f09d277f1a3e4619b9db4a664f14f
|
|
BLAKE2b-256 checksum How to use checksums |
15f2ab9c87575db2ae37f1842000136428cbcdc3910428978b8b55f56ae5a3bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency log