Prerequisites
Before running cloc, check if it is installed:
which cloc
If not found, install it:
- macOS:
brew install cloc - npm:
npm install -g cloc - Debian/Ubuntu:
sudo apt install cloc - Red Hat/Fedora:
sudo yum install cloc
About cloc
cloc counts blank lines, comment lines, and physical lines of source code in 200+ programming languages. It can analyze files, directories, archives (tar, zip, .whl, .ipynb), and git commits/branches.
Common Usage
Count a directory (default: current project):
cloc .
Count using git file list (respects .gitignore):
cloc --vcs=git
Count a specific path:
cloc $ARGUMENTS
Count by file (detailed breakdown):
cloc --by-file --vcs=git
Diff between two git refs:
cloc --git --diff <ref1> <ref2>
Exclude directories:
cloc --exclude-dir=node_modules,vendor,.git .
Output Formats
Use these flags for machine-readable output:
--json— JSON--yaml— YAML--csv— CSV--md— Markdown table--xml— XML
Useful Flags
| Flag | Purpose |
|---|---|
--by-file |
Per-file breakdown instead of per-language |
--vcs=git |
Use git to get file list (respects .gitignore) |
--git |
Treat arguments as git targets (commits, branches) |
--diff <a> <b> |
Show added/removed/modified lines between two sources |
--exclude-dir=<d1,d2> |
Skip directories |
--exclude-lang=<l1,l2> |
Skip languages |
--include-lang=<l1,l2> |
Only count these languages |
--force-lang=<lang>,<ext> |
Map file extension to a language |
--processes=N |
Parallel processing (N cores) |
--quiet |
Suppress progress output |
Guidelines
- Prefer
--vcs=gitover bare.to avoid counting generated/vendored files - Use
--jsonwhen the user needs to process the output programmatically - When comparing versions, use
--git --diff <ref1> <ref2> - For large repos, consider
--processes=Nto speed things up