Вопрос: Как считать все строки кода в каталоге рекурсивно?


У нас есть приложение PHP и мы хотим подсчитать все строки кода под определенным каталогом и его подкаталогами. Нам не нужно игнорировать комментарии, так как мы просто пытаемся получить приблизительную идею.

wc -l *.php 

Эта команда отлично работает в пределах заданного каталога, но игнорирует подкаталоги. Я думал, что это может сработать, но оно возвращается 74, что определенно не так ...

find . -name '*.php' | wc -l

Каков правильный синтаксис для подачи во всех файлах?


1232


источник


Ответы:


Пытаться:

find . -name '*.php' | xargs wc -l

Инструмент SLOCCount может помочь.

Это даст точные исходные строки кода для любого иерархию, на которую вы указываете, а также некоторые дополнительные статистические данные.


2104



Для другого однострочного:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

работает с именами с пробелами, выводит только одно число.


387



Если использовать прилично недавнюю версию Bash (или ZSH), это намного проще:

wc -l **/*.php

В оболочке Bash это требует globstarпараметр, который должен быть установлен, в противном случае **glob-operator не является рекурсивным. Чтобы включить этот параметр, выполните

shopt -s globstar

Чтобы сделать это постоянным, добавьте его в один из файлов инициализации ( ~/.bashrc, ~/.bash_profileи т.д.).


345



Вы можете использовать clocкоторая предназначена для этой цели. Он сообщает каждое количество строк на каждом языке, вместе с тем, сколько из них - комментарии и т. Д.

Пример использования и вывода:

$ 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
-------------------------------------------------------------------------------

210



В 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
-------------------------------------------------------------------------------

88



You didn't specify how many files are there or what is the desired output. Is this what You are looking for:

find . -name '*.php' | xargs wc -l

27



Yet another variation :)

$ find -name '*.php' | xargs cat | wc -l

Edit: this will give the total sum, instead of file-by-file.


20



There is a little tool called sloccount to count the lines of code in directory. It should be noted that it does more than you want as it ignores empty lines/comments, groups the results per programming language and calculates some statistics.


17



More common and simple as for me, suppose you need to count files of different name extensions (say, also natives)

wc `find . -name '*.[h|c|cpp|php|cc]'`

17



POSIX

Lines in each file:

find . -name '*.php' -type f | xargs wc -l

Lines in each file, sorted by file path

find . -name '*.php' -type f | sort | xargs wc -l

Lines in each file, sorted by number of lines, descending

find . -name '*.php' -type f | xargs wc -l | sort -nr

Total lines in all files

find . -name '*.php' -type f | xargs cat | wc -l

16