Подсчитайте общее количество строк в проекте, исключая определенные папки или файлы

#count #language-agnostic #lines-of-code

#подсчитайте #не зависит от языка #строки кода

Вопрос:

Используя команду:

 wc -l   `find . -name * -print` 
  

Вы можете получить общее количество строк всех файлов внутри папки.

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

Итак, как бы вы подсчитали строки в проекте, исключая определенные папки?

Ответ №1:

cloc всегда был отличным другом, когда мне нужно было подсчитать строки src-кода. Используя ядро Linux 2.6.29 в качестве примера:

 $ cloc .

   26667 text files.
      26357 unique files.
          2782 files ignored.

http://cloc.sourceforge.net v 1.50  T=168.0 s (140.9 files/s, 58995.0 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                             11435        1072207        1141803        5487594
C/C   Header                  10033         232559         368953        1256555
Assembly                       1021          35605          41375         223098
make                           1087           4802           5388          16542
Perl                             25           1431           1648           7444
yacc                              5            447            318           2962
Bourne Shell                     50            464           1232           2922
C                                 1            205             58           1496
lex                               5            222            246           1399
HTML                              2             58              0            378
NAnt scripts                      1             85              0            299
Python                            3             62             77            277
Bourne Again Shell                4             55             22            265
Lisp                              1             63              0            218
ASP                               1             33              0            136
awk                               2             14              7             98
sed                               1              0              3             29
XSLT                              1              0              1              7
--------------------------------------------------------------------------------
SUM:                          23678        1348312        1561131        7001719
--------------------------------------------------------------------------------
  

Ответ №2:

С помощью find вы также можете «отрицать» условия соответствия с помощью ! . Например, если я хочу перечислить все .java файлы в каталоге, исключая те, которые содержат Test :

find . -name "*.java" ! -name "*Test*"

Надеюсь, это поможет!

Редактировать:

Кстати, -name предикат фильтрует только имена файлов. Если вы хотите отфильтровать пути (чтобы вы могли фильтровать каталоги), используйте -path :

find . -path "*.java" ! -path "*Test*"

Комментарии:

1. как исключить несколько папок?

2. @rclai, вы могли бы просто добавить дополнительные -path выражения, подобные этому find . -name '*.java' ! -path '*folder1*' ! -path '*folder2*'

Ответ №3:

вы всегда можете исключить их, перечислив файлы с помощью регулярных выражений, например,

*.txt будет включать только текстовые файлы и так далее…

Ответ №4:

Я создал пакет NPM специально для этого использования, который позволяет вам вызывать инструмент CLI и указывать путь к каталогу и папкам / файлам для игнорирования

это выглядит так:

npm i -g @quasimodo147/countlines

чтобы получить $ countlines команду в вашем терминале

затем вы можете сделать countlines . node_modules build dist