Skip to main content

findfmt Logo

CI Status CodeQL Analysis Documentation Status pre-commit.ci status Coverage OpenSSF Best Practices

PyPI Version Python Versions PyPI Wheel GHCR Container License: MIT

uv Ruff Type-checked: ty Docstring Coverage: 100% Conventional Commits Accessibility WCAG 2.1 AA


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 the identify engine.
  • Respects Git: Traverses trees hierarchically while pruning .gitignore and .git/info/exclude paths 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

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)

Source distribution for findfmt 0.2.0
File Size Uploaded
findfmt-0.2.0.tar.gz 76.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for findfmt 0.2.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

This release

0.2.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page