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 \s-1CMD\s0 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 \s-1GNU\s0 tar: --extract-with='tar zxf >FILE<' and on Windows, use, for example: --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 \s-1FILE\s0 which has one file/directory name per line. See also --exclude-list-file

--unicode

Check binary files to see if they contain Unicode expanded \s-1ASCII\s0 text. This causes performance to drop noticably.

Processing Options

--autoconf

Count .in files (as processed by \s-1GNU\s0 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 \s-1SET1\s0 \s-1SET2\s0

Compute differences in code and comments between source file(s) of \s-1SET1\s0 and \s-1SET2\s0. 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.

--diff-timeout N

Ignore files which take more than N seconds to process. Default is 10 seconds. (Large files with many repeated lines can cause Algorithm::Diff::sdiff() to take hours.)

--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 \s-1EXT\s0 extension with the counter for language \s-1LANG\s0. 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 \s-1EXT\s0 is omitted, every file will be counted with the \s-1LANG\s0 counter. This option can be specified multiple times (but that is only useful when \s-1EXT\s0 is given each time). See also --script-lang, --lang-no-ext.

--force-lang-def=FILE

Load language processing filters from \s-1FILE\s0, then use these filters instead of the built-in filters. Note: languages which map to the same file extension (for example: MATLAB/Objective C/MUMPS; Pascal/PHP; Lisp/OpenCL) will be ignored as these require additional processing that is not expressed in language definition files. Use --read-lang-def to define new language filters without replacing built-in filters (see also --write-lang-def).

--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 \s-1LANG\s0 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 \*(C`#!\*(C'). See also --force-lang, --script-lang.

--max-file-size=MB

Skip files larger than \*(C`MB\*(C' megabytes when traversing directories. By default, \*(C`MB\*(C'=100. cloc's memory requirement is roughly twenty times larger than the largest file so running with files larger than 100 \s-1MB\s0 on a computer with less than 2 \s-1GB\s0 of memory will cause problems. Note: this check does not apply to files explicitly passed as command line arguments.

--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 new language processing filters from \s-1FILE\s0 and merge them with those already known to cloc. If \s-1FILE\s0 defines a language cloc already knows about, cloc's definition will take precedence. Use --force-lang-def to over-ride cloc's definitions. (see also --write-lang-def).

--script-lang=LANG,S

Process all files that invoke \*(C`S\*(C' as a \*(C`#!\*(C' scripting language with the counter for language \s-1LANG\s0. For example, files that begin with \*(C`#!/usr/local/bin/perl5.8.8\*(C' 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, \*(C`S\*(C', must have the right case. This option can be specified multiple times. See also --force-lang.

--sdir=DIR

Use \s-1DIR\s0 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).

--stdin-name=FILE

Count lines streamed via \s-1STDIN\s0 as if they came from a file named \s-1FILE\s0.

--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 \*(C`.EXT\*(C' 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 \s-1UNIX\s0 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 \*(C`/.cache/\*(C' or \*(C`/test/\*(C' as part of their path. Directories named \*(C`.bzr\*(C', \*(C`.cvs\*(C', \*(C`.hg\*(C', \*(C`.git\*(C', \*(C`.hg\*(C', and \*(C`.svn\*(C' are always excluded.

--exclude-ext=EXT1[,EXT2 ...]

Do not count files having the given file name extensions.

--exclude-lang=<L1[,<L2> ...]>

Exclude the given comma separated languages from being counted.

--exclude-list-file=FILE

Ignore files whose names appear in \s-1FILE\s0. \s-1FILE\s0 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|include)/' only counts files in directory paths containing \*(C`/src/\*(C' or \*(C`/include/\*(C'.

--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-archive=REGEX

Ignore files that end with the given Perl regular expression. For example, if given

  --skip-archive='(zip|tar(\.(gz|Z|bz2|xz|7z))?)'

the code will skip files that end with .zip, .tar, .tar.gz, .tar.Z, .tar.bz2, .tar.xz, and .tar.7z.

--skip-win-hidden

On Windows, ignore hidden files.

Debug Options

--categorized=FILE

Save names of categorized files to \s-1FILE\s0.

--counted=FILE

Save names of processed source files to \s-1FILE\s0.

--diff-alignment=FILE

Write to \s-1FILE\s0 a list of files and file pairs showing which files were added, removed, and/or compared during a run with --diff. This switch forces the --diff mode on.

--help

Print this usage information and exit.

--found=FILE

Save names of every file found to \s-1FILE\s0.

--ignored=FILE

Save names of ignored files and the reason they were ignored to \s-1FILE\s0.

--print-filter-stages

Print to \s-1STDOUT\s0 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 \s-1FILE\s0 the language processing filters then exits. Useful as a first step to creating custom language definitions. See also --force-lang-def, --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=N

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 \s-1STDOUT\s0.

--quiet

Suppress all information messages except for the final report.

--report-file=FILE

Write the results to \s-1FILE\s0 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 \s-1SQL\s0 \s-1CREATE\s0 and \s-1INSERT\s0 statements which can be read by a database program such as SQLite. If \s-1FILE\s0 is -, output is sent to \s-1STDOUT\s0.

--sql-project=NAME

Use <name> as the project identifier for the current run. Only valid with the --sql option.

--sql-append

Append \s-1SQL\s0 insert statements to the file specified by --sql and do not generate table creation option.

--sum-one

For plain text reports, show the \s-1SUM:\s0 output line even if only one input file is processed.

--xml

Write the results in \s-1XML\s0.

--xsl[=FILE]

Reference \s-1FILE\s0 as an \s-1XSL\s0 stylesheet within the \s-1XML\s0 output. If \s-1FILE\s0 is not given, writes a default stylesheet, cloc.xsl. This switch forces --xml to be on.

--yaml

Write the results in \s-1YAML\s0.

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 \*(C`align.txt\*(C':

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 \*(C`foo.c\*(C' and save the result in \*(C`foo.c.nc\*(C'

cloc --strip-comments=nc foo.c

Additional examples can be found at <http://cloc.sourceforge.net>.

ENVIRONMENT

None.

FILES

None.

RELATED TO cloc…

sloccount\|(1)

AUTHORS

The cloc program was written by Al Danial <[email protected]> and is Copyright (C) 2006-2013 Northrop Grumman Corporation.

The manual page was originally written by Jari Aalto <[email protected]>.

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