Утилита для подсчета количества строк кода в Python или Bash
Есть ли быстрый или грязный способ либо в python, либо в bash script, который может рекурсивно спускаться по каталогу и подсчитывать общее количество строк кода? Мы хотели бы иметь возможность исключать некоторые каталоги.
Например:
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
Это была бы действительно полезная утилита.
Ответы
Ответ 1
Нашел замечательную утилиту 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
--------------------------------------------------------------------------------
Ответ 2
Только аргументы find
и wc
могут решить вашу проблему.
С find
вы можете указать очень сложную логику следующим образом:
find /apps/projects/reallycoolapp -type f -iname '*.py' ! -path '*/lib/*' ! -path '*/frameworks/*' | xargs wc -l
Здесь !
инвертирует условие, поэтому эта команда будет считать строки для каждого файла python не в каталогах lib/или в frameworks/.
Просто не забывайте '*', или он ничего не будет соответствовать.
Ответ 3
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}'
Несколько заметок...
- . после того, как находка важна, поскольку команда
cut
может отделить счетчик от имени файла
- это многострочная команда, поэтому убедитесь, что после сбрасывания косых черт нет пробелов
- вам может потребоваться исключить другие файлы, такие как svn или что-то еще. Также это даст смешные значения для двоичных файлов, поэтому вы можете использовать grep для белого списка определенных типов файлов, которые вас интересуют, то есть:
grep -e .html$ -e .css$