2011-09-21 15 views
14

Esiste un modo rapido e sporco in entrambi gli script python o bash, che possono ricorsivamente discendere una directory e contare il numero totale di righe di codice? Vorremmo essere in grado di escludere alcune directory però.Utilità per contare il numero di righe di codice in Python o Bash

Ad esempio:

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

Le directory escluse dovrebbero essere ricorsiva pure. Ad esempio:

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

Questa sarebbe un'utilità davvero utile.

+1

Numero totale di righe per tutti i file all'interno della directory? –

+0

Hai anche bisogno di filtrare le righe di commento? –

risposta

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}' 

Alcune note ...

  1. il. dopo il ritrovamento è importante poiché è così che il comando cut può separare il conteggio dal nome del file
  2. questo è un comando multilinea, in modo da assicurarsi che non ci sono spazi dopo la fuga barre
  3. potrebbe essere necessario per escludere altri file come svn o qualcosa. Anche questo darà i valori divertenti per i file binari per cui si potrebbe desiderare di utilizzare grep di whitelist i tipi di file specifici a cui è interessato, vale a dire: grep -e .html$ -e .css$
36

Trovato un CLOC programma di utilità impressionante. https://github.com/AlDanial/cloc

Ecco il comando abbiamo corso:

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

Ed ecco l'output

-------------------------------------------------------------------------------- 
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 
-------------------------------------------------------------------------------- 
+3

Buono, anche se non è un Python, né Bash :) – Tadeck

+0

Su mac puoi fare 'brew install cloc'. –

10

I find e wc argomenti da solo può risolvere il tuo problema.

Con find è possibile specificare la logica molto complesso come questo:

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

Qui il ! invertire la condizione in modo da questo comando conterà le linee per ogni file Python non in 'lib /' o in 'quadri/'directory.

Basta non dimenticare il '*' o non corrisponderà a nulla.

+0

Eccellente! Ho appena cambiato un po 'l'ultimo: find/apps/projects/reallycoolapp -type f -iname' * .py '| xargs wc -l E ora ho un ottimo contatore! –

Problemi correlati