我们已经有了一个PHP应用程序,并想算一笔特定的目录及其子目录下的所有代码行。 我们不需要忽略评论,我们只是想获得一个粗略的想法。
wc -l *.php
该命令指定目录中的伟大工程,但忽略子目录。 我想这可能工作,但它返回74,这绝对不是这样...
find . -name '*.php' | wc -l
什么是正确的语法中的所有文件养活?
我们已经有了一个PHP应用程序,并想算一笔特定的目录及其子目录下的所有代码行。 我们不需要忽略评论,我们只是想获得一个粗略的想法。
wc -l *.php
该命令指定目录中的伟大工程,但忽略子目录。 我想这可能工作,但它返回74,这绝对不是这样...
find . -name '*.php' | wc -l
什么是正确的语法中的所有文件养活?
尝试:
find . -name '*.php' | xargs wc -l
该SLOCCount工具可以很好的帮助。
这会给为你点它在任何层次码计数准确的源代码行,以及一些额外的统计数据。
对于另外一个班轮:
( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l
适用于有空格的名称,只输出一个号码。
如果使用的是体面最近击(或ZSH)的版本,它的简单得多:
wc -l **/*.php
在Bash shell中这需要globstar
选项进行设置,否则**
水珠运营商不是递归。 要启用此设置,问题
shopt -s globstar
为了使这个永久性的,将其添加到初始化文件(之一~/.bashrc
, ~/.bash_profile
等等)。
您可以使用cloc
这是该确切目的建造的效用。 它报告每个每种语言线的量,用多少人有意见等CLOC可在Linux,Mac和Windows一起。
使用和输出例如:
$ cloc --exclude-lang=DTD,Lua,make,Python .
2570 text files.
2200 unique files.
8654 files ignored.
http://cloc.sourceforge.net v 1.53 T=8.0 s (202.4 files/s, 99198.6 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
Javascript 1506 77848 212000 366495
CSS 56 9671 20147 87695
HTML 51 1409 151 7480
XML 6 3088 1383 6222
-------------------------------------------------------------------------------
SUM: 1619 92016 233681 467892
-------------------------------------------------------------------------------
在类Unix系统中,有一个工具,称为cloc
提供代码的统计数据。
我跑在我们的代码库随机目录,它说:
59 text files.
56 unique files.
5 files ignored.
http://cloc.sourceforge.net v 1.53 T=0.5 s (108.0 files/s, 50180.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 36 3060 1431 16359
C/C++ Header 16 689 393 3032
make 1 17 9 54
Teamcenter def 1 10 0 36
-------------------------------------------------------------------------------
SUM: 54 3776 1833 19481
-------------------------------------------------------------------------------
您没有指定多少文件存在或什么是所需的输出。 这是你想要的:
find . -name '*.php' | xargs wc -l
另一个变化:)
$ find . -name '*.php' | xargs cat | wc -l
编辑:这会给而不是文件通过文件的总和。
EDIT2:添加.
后find
,使其工作
POSIX
这里不像其他大多数的答案,这些工作的任何POSIX系统上,对于任何数量的文件,并与任何文件名(除非另有说明)。
线在每个文件:
find . -name '*.php' -type f -exec wc -l {} \;
# faster, but includes total at end if there are multiple files
find . -name '*.php' -type f -exec wc -l {} +
行中的每个文件,按文件路径排序
find . -name '*.php' -type f | sort | xargs -L1 wc -l
# for files with spaces or newlines, use the non-standard sort -z
find . -name '*.php' -type f -print0 | sort -z | xargs -0 -L1 wc -l
在每个文件中,用线数量排序线,降序
find . -name '*.php' -type f -exec wc -l {} \; | sort -nr
# faster, but includes total at end if there are multiple files
find . -name '*.php' -type f -exec wc -l {} + | sort -nr
共线中的所有文件
find . -name '*.php' -type f -exec cat {} + | wc -l
更常见和简单对我来说,假设你需要统计不同扩展名的文件(比如说,也土人)
wc `find . -name '*.[h|c|cpp|php|cc]'`
令人惊讶的是没有根据发现的回答-exec
和awk
。 开始了:
find . -type f -exec wc -l {} \; | awk '{ SUM += $0} END { print SUM }'
这段代码找到的所有文件( -type f
)。 为了按文件扩展名查找,使用-name
:
find . -name '*.py' -exec wc -l '{}' \; | awk '{ SUM += $0; } END { print SUM; }'
有一个叫的小工具sloccount计数的代码行目录。 应当指出的是,它比你要因为它忽略空行/意见,团体每编程语言的结果,并计算一些统计数据更多。
你想要的是一个简单for
循环:
total_count=0
for file in $(find . -name *.php -print)
do
count=$(wc -l $file)
let total_count+=count
done
echo "$total_count"
对于来源,只:
wc `find`
进行筛选,只使用grep
wc `find | grep .php$`
一个直接的一个,这将是快速的,将使用所有的搜索/过滤的力量find
,当有太多的文件(编号参数溢出),做工精细用他们的名字有趣的符号文件,而无需使用不会失败xargs
,不会推出无用地高数量的外部命令(感谢+
用于find
的-exec
)。 干得好:
find . -name '*.php' -type f -exec cat -- {} + | wc -l
猜没有人会看到这个埋在后面......但没有一个答案,到目前为止,在得到与空格的文件名的问题。 此外,所有使用xargs
受如果在树的路径总长度超过外壳环境大小限制(默认为在Linux中几兆字节)失败。 这是一个在一个相当直接的方式解决这些问题。 子shell负责文件与空间。 该awk
合计单个文件的流wc
输出,因此应该永远用完的空间。 这也限制了exec
的文件只(跳过目录):
find . -type f -name '*.php' -exec bash -c 'wc -l "$0"' {} \; | awk '{s+=$1} END {print s}'
我知道这个问题被标记为bash的 ,但似乎你正在试图解决的问题也PHP相关。
塞巴斯蒂安·伯格曼写了一个工具,叫做PHPLOC ,你想要做什么,最重要的是提供了一个项目的复杂性的概述。 这是报告的一个例子:
Size
Lines of Code (LOC) 29047
Comment Lines of Code (CLOC) 14022 (48.27%)
Non-Comment Lines of Code (NCLOC) 15025 (51.73%)
Logical Lines of Code (LLOC) 3484 (11.99%)
Classes 3314 (95.12%)
Average Class Length 29
Average Method Length 4
Functions 153 (4.39%)
Average Function Length 1
Not in classes or functions 17 (0.49%)
Complexity
Cyclomatic Complexity / LLOC 0.51
Cyclomatic Complexity / Number of Methods 3.37
正如你所看到的,所提供的信息是很多从开发者的角度来看更为有用,因为它可以大致告诉你项目有多么复杂,你开始使用它之前。
WC-L? 更好地使用grep -C ^
WC -l? 错误! wc命令计数新行代码,而不是线! 当文件不符合新行代码结束最后一行, 这将不计!
如果你还想指望行,用grep -c ^,完整的例子:
#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
#you see use grep instead wc ! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
最后,注意在WC -l陷阱(计数进入,而不是行!)
如果你希望你的结果用线数量排序,你可以添加| sort
| sort
或| sort -r
| sort -r
( -r
按降序排序)于第一答案,就像这样:
find . -name '*.php' | xargs wc -l | sort -r
有些不同:
wc -l `tree -if --noreport | grep -e'\.php$'`
这工作了罚款,但你需要至少有一个*.php
在当前文件夹中的文件或子文件夹中的一个,要不然wc
摊位
这是很容易与zsh的水珠:
wc -l ./**/*.php
如果你使用bash,你只需要升级。 我们绝对没有理由使用bash。
如果你只需要在假设你的PHP文件,你可以,如果你已经安装的GnuWin32甚至在Windows下使用非常简单的一行命令行的总数。 像这样:
cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l
你需要指定究竟否则Windows自带的FIND.EXE FIND.EXE(从旧类似DOS的命令)将被执行,因为它可能是在的GnuWin32环境路径之前,和有不同的参数和结果。
请注意,在上面的命令,你应该使用反引号,不是单引号。
首先给予了最长的文件(即也许这些长文件需要一些重构爱吗?),但不包括一些供应商目录:
find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less
对于Windows,方便,快捷的工具是LocMetrics 。
在OS X上至少,查找一些其他的答案打印“总”多次在大型上市的上市+ xarg + WC命令,并没有给出任何完成总。 我能得到使用以下命令.c文件单总:
find . -name '*.c' -print0 |xargs -0 wc -l|grep -v total|awk '{ sum += $1; } END { print "SUM: " sum; }'
我用这个内嵌脚本,我从SRC-项目的目录推出:
for i in $(find . -type f); do rowline=$(wc -l $i | cut -f1 -d" "); file=$(wc -l $i | cut -f2 -d" "); lines=$((lines + rowline)); echo "Lines["$lines"] " $file "has "$rowline"rows."; done && unset lines
产生这样的输出:
Lines[75] ./Db.h has 75rows.
Lines[143] ./Db.cpp has 68rows.
Lines[170] ./main.cpp has 27rows.
Lines[294] ./Sqlite.cpp has 124rows.
Lines[349] ./Sqlite.h has 55rows.
Lines[445] ./Table.cpp has 96rows.
Lines[480] ./DbError.cpp has 35rows.
Lines[521] ./DbError.h has 41rows.
Lines[627] ./QueryResult.cpp has 106rows.
Lines[717] ./QueryResult.h has 90rows.
Lines[828] ./Table.h has 111rows.
而我喜欢的剧本,我更喜欢这一个,因为它也显示每个文件的概要,只要总
wc -l `find . -name "*.php"`
不包括空行
find . -name "*.php" | xargs grep -v -c '^$' | awk 'BEGIN {FS=":"} { $cnt = $cnt + $2} END {print $cnt}'
包括空行:
find . -name "*.php" | xargs wc -l
如果你想保持它的简单,省去了中间人,只是叫wc
与所有的文件名:
wc -l `find . -name "*.php"`
或在现代化的语法:
wc -l $(find . -name "*.php")
只要有任何的目录名或文件名没有空格的作品。 而且只要你没有文件数万(现代炮弹支持很长的命令行)。 你的项目有74个文件,所以你有足够的成长空间。
你并不需要所有这些复杂难记的命令。 你只需要一个叫做行计数器工具。
快速概览
这是你如何得到该工具
$ pip install line-counter
使用line
命令来获得当前目录下的文件数量和行数(递归)
$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839
如果您想了解更多的细节,只是用line -d
。
$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c 72
Dir A/file D.py 268
file A.py 467
file B.c 32
file count: 4
line count: 839
而这种工具的最好的部分是,你可以添加.gitignore
类似配置文件到它。 您可以设置规则来选择或忽略什么样的文件来算,就像你在“的.gitignore”做什么。
更多的说明和用法是在这里: https://github.com/MorganZhang100/line-counter
如果你在Linux(和我想你是),我建议我的工具, 通晓多国语言 。 此产品比大大加快sloccount
或cloc
它比更多的其他功能sloccount
。
你可以调用它
poly .
要么
poly
所以它更加人性化比一些令人费解的bash脚本。