Updated Edit
On this page
Summarize the files under a directory tree, grouped by format, with counts, sizes, and lines of code as terminal tables or JSON.
#dirstat scan
Summarize the files under a directory tree, grouped by format, with counts, sizes, and lines of code as terminal tables or JSON.
Effect: read_only
#Flags
| Name | Short | Type | Presence | Env | Description |
|---|---|---|---|---|---|
--method | str | default: hybrid | how each scanned file's format group is decided before it is counted Values: ext (group by extension only, sniffing nothing), type (content-sniff every file), hybrid (trust known text extensions, content-sniff everything else). | ||
--formats | str | default: raw | how the chosen group's name is spelled before files are counted under it Values: raw (the extension or sniffed MIME type exactly as it came out), canonical (merge alias formats (mjs into js, h into c) and name extensionless scripts by their shebang interpreter). | ||
--depth | int | default: -1 | maximum directory depth below the root; -1 = unlimited; the root is depth 0 | ||
--exclude | list[str] (unique) | default: [".git", "node_modules", ".venv", "vendor", "build", "dist", "target", "zig-out", "zig-pkg", ".next", ".svelte-kit", "__pycache__", ".mypy_cache", ".ruff_cache", ".pytest_cache", ".hypothesis", ".gradle", ".idea", ".wrangler", ".vscode"] | exact base name to skip, matching directories and files; repeatable; passing the flag replaces the built-in default list entirely | ||
--config | str | default: `` | path to a TOML scan-config file (keys: exclude, method, formats, depth, ignored, hidden, type, stats, sort_by, sort_order); never auto-discovered; a key set both in the file and on the command line is an error | ||
--ignored | str | default: exclude | gitignored-path handling; outside a git work tree, exclude and only behave as if no patterns exist Values: include (no gitignore matching at all), exclude (drop the paths git ignores), only (keep only the paths git ignores). | ||
--hidden | str | default: include | dot-prefixed entry handling; the root directory itself is never treated as hidden Values: include (walk into dot-prefixed entries), exclude (skip dot-prefixed entries). | ||
--stats | list[str] (unique) | optional | stat to compute and show (repeatable): count, total-size, min-size, max-size, avg-size, total-loc, min-loc, max-loc, avg-loc; omitted, every stat is shown | ||
--type | str | default: both | filter the reported groups by their text/binary classification Values: text (keep the text groups), binary (keep the binary groups), both (keep every group). | ||
--sort-by | list[str] (unique) | default: ["count"] | sort column, in precedence order when repeated: format, count, total-size, min-size, max-size, avg-size, total-loc, min-loc, max-loc, avg-loc | ||
--sort-order | str | default: desc | sort direction, applied uniformly to every --sort-by column Values: asc (smallest first), desc (largest first). | ||
--top | int | default: -1 | keep only the first N groups after sorting (table output only); -1 or 0 = all | ||
--show | str | default: both | which sections the human table output renders; ignored in machine mode Values: summary (the summary section alone), table (the format tables alone), both (the summary and the tables). | ||
--combined, --no-combined | bool | default: true | render one merged table with text and binary rows distinguished by color, instead of separate text/binary tables | ||
--singletons | str | default: show | how one-file formats are rendered (table output only) Values: show (one row per one-file format, as-is), collapse (one (singletons) row standing for all of them). | ||
--list-no-ext, --no-list-no-ext | bool | default: false | list the paths of extensionless files (a section in table output, a field in JSON output) | ||
--legend, --no-legend | bool | default: true | show the text/binary color legend under the combined table (needs active colors) | ||
--colors, --no-colors | bool | default: true | use ANSI colors; auto-disabled when stdout is not a TTY | ||
--human, --no-human | bool | default: true | human-readable sizes and thousands separators (table output only) | ||
--style | str | default: unicode | which character set the human table's borders are drawn with Values: unicode (unicode box-drawing borders), ascii (plain ASCII borders). |
#Arguments
| Name | Type | Presence | Description |
|---|---|---|---|
where | str | default: . | directory to summarize; omitted, the current directory |