Утилита для подсчета количества строк кода в Python или Bash - PullRequest
15 голосов
/ 22 сентября 2011

Существует ли быстрый и грязный способ в скриптах на python или bash, который может рекурсивно спускаться в каталог и подсчитывать общее количество строк кода? Мы хотели бы иметь возможность исключить некоторые каталоги.

Например:

start at: /apps/projects/reallycoolapp
exclude: lib/, frameworks/

Исключенные каталоги также должны быть рекурсивными. Например:

/app/projects/reallycool/lib SHOULD BE EXCLUDED
/app/projects/reallycool/modules/apple/frameworks SHOULD ALSO BE EXCLUDED

Это была бы действительно полезная утилита.

Ответы [ 3 ]

37 голосов
/ 22 сентября 2011

Нашел классную утилиту CLOC. https://github.com/AlDanial/cloc

Вот команда, которую мы выполнили:

perl cloc.pl /apps/projects/reallycoolapp --exclude-dir=lib,frameworks

А вот и вывод

--------------------------------------------------------------------------------
Language                      files          blank        comment           code   
--------------------------------------------------------------------------------
PHP                              32            962           1352           2609
Javascript                        5            176            225            920
Bourne Again Shell                4             45             70            182
Bourne Shell                     12             52            113            178
HTML                              1              0              0             25
--------------------------------------------------------------------------------
SUM:                             54           1235           1760           3914
--------------------------------------------------------------------------------
13 голосов
/ 22 сентября 2011

Только аргументы find и wc могут решить вашу проблему.

С помощью find вы можете указать очень сложную логику, например:

find /apps/projects/reallycoolapp -type f -iname '*.py' ! -path '*/lib/*' ! -path '*/frameworks/*' | xargs wc -l

Здесь ! инвертируйте условие, чтобы эта команда считала строки для каждого файла python, не находящегося в каталогах 'lib /' или 'frameworks /'.

Просто не забывайте '*', иначе она не будет ничего совпадать.

3 голосов
/ 22 сентября 2011
find ./apps/projects/reallycool -type f | \
     grep -v -e /app/projects/reallycool/lib \
             -e /app/projects/reallycool/modules/apple/frameworks | \
     xargs wc -l | \
     cut -d '.' -f 1 | \
     awk 'BEGIN{total=0} {total += $1} END{print total}'

Несколько заметок ...

  1. .после поиска важно, поскольку именно так команда cut может отделить счет от имени файла
  2. , это многострочная команда, поэтому убедитесь, что после экранирующих косых черт нет пробелов
  3. вам может потребоваться исключить другие файлы, такие как SVN или что-то.Также это даст забавные значения для двоичных файлов, поэтому вы можете использовать grep для внесения в белый список определенных типов файлов, которые вас интересуют, например: grep -e .html$ -e .css$
...