cloc(1) - Linux man page

Name

cloc - Count, and compute differences of, lines of source code and comments.

Synopsis

cloc [options] <FILE|DIR> ...

Description

Count, or compute differences of, physical lines of source code in the given files (may be archives such as compressed tarballs or zip files) and/or recursively below the given directories. It is written entirely in Perl, using only modules from the standard distribution.

Options

Input Options

To count standard input, use the special filename -.
--extract-with=<cmd>
This option is only needed if cloc is unable to figure out how to extract the contents of the input file(s) by itself. Use <cmd> to extract binary archive files (e.g.: .tar.gz, .zip, .Z). Use the literal '>FILE<' as a stand-in for the actual file(s) to be extracted. For example, to count lines of code in the input files gcc-4.2.tar.gz perl-5.8.8.tar.gz on Unix use:
--extract-with='gzip -dc >FILE< | tar xf -
or, if you have GNU tar:
--extract-with='tar zxf >FILE<'
and on Windows, use:
--extract-with="\"c:\Program Files\WinZip\WinZip32.exe\" -e -o >FILE<
--list-file=<file>
Take the list of file and/or directory names to process from <file> which has one file/directory name per line. See also --exclude-list-file
--unicode
Check binary files to see if they contain Unicode expanded ASCII text. This causes performance to drop noticably.

Processing Options

--autoconf
Count .in files (as processed by GNU autoconf) of recognized languages.
--by-file
Report results for every source file encountered.
--by-file-by-lang
Report results for every source file encountered in addition to reporting by language.
--diff <set1 <set2>>
Compute differences in code and comments between source file(s) of <set1> and <set2>. The inputs may be pairs of files, directories, or archives. Use --diff-alignment to generate a list showing which file pairs where compared. See also --ignore-case, --ignore-whitespace.
--follow-links
[Unix only] Follow symbolic links to directories (sym links to files are always followed).
--force-lang=<lang[,<ext>]>
Process all files that have a <ext> extension with the counter for language <lang>. For example, to count all .f files with the Fortran 90 counter (which expects files to end with .f90) instead of the default Fortran 77 counter, use:
--force-lang="Fortran 90",f
If <ext> is omitted, every file will be counted with the <lang> counter. This option can be specified multiple times (but that is only useful when <ext> is given each time). See also --script-lang.
--ignore-whitespace
Ignore horizontal white space when comparing files with --diff. See also --ignore-case.
--ignore-case
Ignore changes in case; consider upper- and lowercase letters equivalent when comparing files with --diff. See also --ignore-whitespace.
--lang-no-ext=<lang>
Count files without extensions using the <lang> counter. This option overrides internal logic for files without extensions (where such files are checked against known scripting languages by examining the first line for "#!"). See also --force-lang, --script-lang.
--stdin-name=<file>
Count lines streamed via STDIN as if they came from a file named <file>.
--read-binary-files
Process binary files in addition to text files. This is usually a bad idea and should only be attempted with text files that have embedded binary data.
--read-lang-def=<file>
Load from <file> the language processing filters. (see also --write-lang-def) then use these filters instead of the built-in filters.
--script-lang=LANG,<s>
Process all files that invoke <s> as a "#!" scripting language with the counter for language LANG . For example, files that begin with "#!/usr/local/bin/perl5.8.8" will be counted with the Perl counter by using
--script-lang=Perl,perl5.8.8
The language name is case insensitive but the name of the script language executable, <s>, must have the right case. This option can be specified multiple times. See also --force-lang.
--sdir=<dir>
Use <dir> as the scratch directory instead of letting File::Temp chose the location. Files written to this location are not removed at the end of the run (as they are with File::Temp).
--skip-uniqueness
Skip the file uniqueness check. This will give a performance boost at the expense of counting files with identical contents multiple times (if such duplicates exist).
--strip-comments=<ext>
For each file processed, write to the current directory a version of the file which has blank lines and comments removed. The name of each stripped file is the original file name with ".<ext"> appended to it. It is written to the current directory unless --original-dir is on.
--original-dir
Write the stripped files the same directory as the original files. Only effective in combination with --strip-comments.
--sum-reports
Input arguments are report files previously created with the --report-file option. Makes a cumulative set of results containing the sum of data from the individual report files.
--unix
Over-ride the operating system detection logic and run in UNIX mode. See also --windows, --show-os.
--windows
Over-ride the operating system detection logic and run in Microsoft Windows mode. See also --unix, --show-os.

Filter Options

--exclude-dir=<dir[,<dir> ...]>
Exclude the given comma separated directories from being scanned. For example:
--exclude-dir=.cache,test
will skip all files that match "/.cache/" or "/test/" as part of their path. Directories named ".bzr", ".cvs", ".hg", ".git", ".hg", and ".svn" are always excluded.
--exclude-lang=<L1[,<L2> ...]>
Exclude the given comma separated languages from being counted.
--exclude-list-file=<file>
Ignore files whose names appear in <file>. <file> should have one entry per line. Relative path names will be resolved starting from the directory where cloc is invoked. See also --list-file.
--match-d=<regex>
Only count files in directories matching the Perl regex. For example
--match-d=/src/
only counts files in directories containing "src".
--not-match-d=<regex>
Count all files except in directories matching the Perl regex.
--match-f=<regex>
Only count files whose basenames match the Perl regex. For example this only counts files at start with Widget or widget:
--match-f="^[Ww]idget"
--not-match-f=<regex>
Count all files except those whose basenames match the Perl regex.
--skip-win-hidden
On Windows, ignore hidden files.

Debug Options

--categorized=<file>
Save names of categorized files to <file>.
--counted=<file>
Save names of processed source files to <file>.
--help
Print this usage information and exit.
--found=<file>
Save names of every file found to <file>.
--ignored=<file>
Save names of ignored files and the reason they were ignored to <file>.
--print-filter-stages
Print to STDOUT processed source code before and after each filter is applied.
--show-ext[=<ext]>
Print information about all known (or just the given) file extensions and exit.
--show-lang[=<lang]>
Print information about all known (or just the given) languages and exit.
--show-os]>
Print the value of the operating system mode and exit. See also --unix, --windows.
-v[=<number]>
Turn on verbose with optional numeric value.
--version
Print the version of this program and exit.
--write-lang-def=<file>
Writes to <file> the language processing filters then exits. Useful as a first step to creating custom language definitions. See also --read-lang-def.

Output Options

--3

Print third-generation language output. (This option can cause report summation to fail if some reports were produced with this option while others were produced without it.)

--progress-rate=<number>
Show progress update after every <n> files are processed (default <n>=100). Set <n> to 0 to suppress progress output; useful when redirecting output to STDOUT .
--quiet
Suppress all information messages except for the final report.
--report-file=<file>
Write the results to <file> instead of standard output.
--out=<file>
Synonym for --report-file=<file>.
--csv
Write the results as comma separated values.
--csv-delimiter=<C>
Use the character <C> as the delimiter for comma separated files instead of ,. This switch forces --csv to be on.
--sql=<file>
Write results as SQL CREATE and INSERT statements which can be read by a database program such as SQLite. If <file> is -, output is sent to STDOUT .
--sql-project=<name>
Use <name> as the project identifier for the current run. Only valid with the --sql option.
--sql-append
Append SQL insert statements to the file specified by --sql and do not generate table creation option.
--sum-one
For plain text reports, show the SUM: output line even if only one input file is processed.
--xml
Write the results in XML .
--xsl[=<file]>
Reference <file> as an XSL stylesheet within the XML output. If <file> is not given, writes a default stylesheet, cloc.xsl. This switch forces --xml to be on.
--yaml
Write the results in YAML .

Examples

Count the lines of code in the Perl 5.10.0 compressed tar file on a UNIX-like operating system:

cloc perl-5.10.0.tar.gz
Count the changes in files, code, and comments between Python releases 2.6.6 and 2.7:
cloc --diff Python-2.6.6.tar.bz  Python-2.7.tar.bz2
To see how cloc aligns files for comparison between two code bases, use the --diff-alignment=<file> option. Here the alignment information is written to "align.txt":
cloc --diff-aligment=align.txt gcc-4.4.0.tar.bz2  gcc-4.5.0.tar.bz2
Print the recognized languages
cloc --show-lang
Remove comments from "foo.c" and save the result in "foo.c.nc"
cloc --strip-comments=nc foo.c
Additional examples can be found at <http://cloc.sourceforge.net>.

Environment

None.

Files

None.

See Also

sloccount(1)

Authors

The cloc program was written by Al Danial <al.danial@gmail.com> and is Copyright © 2006-2012 Northrop Grumman Corporation.

The manual page was originaly written by Jari Aalto <jari.aalto@cante.net>.

Both the code and documentation is released under the GNU GPL version 2 or (at your option) any later version. For more information about license, visit <http://www.gnu.org/copyleft/gpl.html>.