2011-09-21 21 views
14

¿Hay una manera rápida y sucia en el script python o bash, que puede descender recursivamente por un directorio y contar el número total de líneas de código? Sin embargo, nos gustaría poder excluir ciertos directorios.Utilidad para contar el número de líneas de código en Python o Bash

Por ejemplo:

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

Los directorios excluidos deben ser recursivas también. Por ejemplo:

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

Esta sería una utilidad muy útil.

+1

¿Número total de líneas para todos los archivos dentro del directorio? –

+0

¿También necesita filtrar las líneas de comentarios? –

Respuesta

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

Algunas notas ...

  1. el. después de que el hallazgo es importante, ya que es como el comando cut puede separar el recuento del nombre de archivo
  2. este es un comando de múltiples líneas, así que asegúrese de que no hay espacios después del escape barras
  3. puede que tenga que excluir otros archivos como svn o algo. También esto le dará a los valores divertidos para los archivos binarios así que sería bueno utilizar grep a la lista blanca de los tipos de archivo específicos que le interesan, es decir: grep -e .html$ -e .css$
36

Encontró un CLOC utilidad impresionante. https://github.com/AlDanial/cloc

Este es el comando que nos encontramos:

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

Y aquí es la salida

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

Bueno, aunque no es un Python, ni Bash :) – Tadeck

+0

En mac puede hacer 'brew install cloc'. –

10

Los find y wc argumentos por sí solo puede resolver su problema.

Con find puede especificar la lógica muy compleja como esta:

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

Aquí el ! invierten la condición por lo que este comando contar las líneas para cada archivo de pitón no en 'lib /' o en 'marcos/'directorios.

No olvides el '*' o no coincidirá con nada.

+0

¡Excelente! Acabo de cambiar un poco la última: find/apps/projects/reallycoolapp -type f -iname '* .py' | xargs wc -l ¡Y ahora tengo un gran contador! –

Cuestiones relacionadas