19

ディレクトリを再帰的に降りて、コードの合計行数をカウントできる、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

これは本当に便利なユーティリティです。

4

3 に答える 3

41

素晴らしいユーティリティ 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
--------------------------------------------------------------------------------
于 2011-09-21T23:34:26.000 に答える
15

findとのwc引数だけで問題を解決できます。

find次のような非常に複雑なロジックを指定できます。

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

ここで!条件を反転して、このコマンドが「lib/」または「frameworks/」ディレクトリにない各 python ファイルの行をカウントするようにします。

「*」を忘れないでください。そうしないと、何にも一致しません。

于 2011-09-22T05:25:35.550 に答える
4
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$
于 2011-09-21T23:21:20.627 に答える