2011-09-06 24 views
1

我正在嘗試創建一個shell腳本來計算一個文件夾中的代碼行數。腳本使用find來計算代碼行數

我得到這個:

h=find . -type f -name \*.[h]* -print0 | xargs -0 cat | wc -l 
m=find . -type f -name \*.[m]* -print0 | xargs -0 cat | wc -l 

expr $m + $h 

但是,當我試圖運行它,我得到這個:

lines-of-code: line 6: .: -t: invalid option 
.: usage: . filename [arguments] 
    0 
lines-of-code: line 7: .: -t: invalid option 
.: usage: . filename [arguments] 
    0 
+ 

我知道我必須做一些事情,使之在特定的文件夾中運行我進來了,這甚至有可能嗎?

+1

我不得不提到的代碼計數行是不是一個可行的度量。 –

+0

不知道這一點。我只是希望能夠知道寫了多少代碼 - – chikuba

回答

6

DDIYS(別對你自己)用cloc代替。用Perl編寫的優秀工具,可以爲你計算以及其他的東西。它承認80多種語言。

輸出示例:

prompt> cloc perl-5.10.0.tar.gz 
    4076 text files. 
    3883 unique files.           
    1521 files ignored. 

http://cloc.sourceforge.net v 1.50 T=12.0 s (209.2 files/s, 70472.1 lines/s) 
------------------------------------------------------------------------------- 
Language      files   blank  comment   code 
------------------------------------------------------------------------------- 
Perl       2052   110356   130018   292281 
C        135   18718   22862   140483 
C/C++ Header     147   7650   12093   44042 
Bourne Shell     116   3402   5789   36882 
Lisp        1   684   2242   7515 
make        7   498   473   2044 
C++        10   312   277   2000 
XML        26   231    0   1972 
yacc        2   128    97   1549 
YAML        2    2    0   489 
DOS Batch      11    85    50   322 
HTML        1    19    2    98 
------------------------------------------------------------------------------- 
SUM:       2510   142085   173903   529677 
------------------------------------------------------------------------------- 
+1

偉大的建議,謝謝! –

1

報價,如命令:

h=$(find . -type f -name *.[h]* -print0 | xargs -0 cat | wc -l) 

也請看看sloccount計數的代碼行。你可以用sudo apt-get install sloccount

1

在Debian/Ubuntu的安裝對於這個特定的問題,我有不同的解決方案:

find . -type f -print0 | wc --files0-from=- 
+0

我會在哪裏使用它? – chikuba

0

現在,它的作品!

h=$(find . -type f -name \*.[h]* -print0 | xargs -0 cat | wc -l) 
m=$(find . -type f -name \*.[m]* -print0 | xargs -0 cat | wc -l) 

expr $m + $h 
0

可能是我誤解了這個問題,但是這樣對你有用嗎?

wc -l *.[mh]*