Pregunta ¿Cómo contar todas las líneas de código en un directorio recursivamente?


Tenemos una aplicación PHP y queremos contar todas las líneas de código bajo un directorio específico y sus subdirectorios. No necesitamos ignorar los comentarios, ya que solo estamos tratando de tener una idea aproximada.

wc -l *.php 

Ese comando funciona muy bien dentro de un directorio determinado, pero ignora los subdirectorios. Estaba pensando que esto podría funcionar, pero está devolviendo 74, que definitivamente no es el caso ...

find . -name '*.php' | wc -l

¿Cuál es la sintaxis correcta para alimentar en todos los archivos?


1257
2017-08-31 17:42


origen


Respuestas:


Tratar:

find . -name '*.php' | xargs wc -l

La herramienta SLOCCount puede ayudar también.

Proporcionará una fuente precisa de conteo de código para lo que sea jerarquía a la que lo apunta, al igual que algunas estadísticas adicionales.


2149
2017-08-31 17:50



Para otro one-liner:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

trabaja con nombres con espacios, solo emite un número.


393
2017-08-31 20:26



Si utiliza una versión decentemente reciente de Bash (o ZSH), es mucho más simple:

wc -l **/*.php

En el shell Bash esto requiere la globstar opción para establecer, de lo contrario, la ** glob-operator no es recursivo. Para habilitar esta configuración, emita

shopt -s globstar

Para hacer esto permanente, agréguelo a uno de los archivos de inicialización (~/.bashrc, ~/.bash_profile etc.).


349
2018-02-04 15:11



Puedes usar el cloc utilidad que está construida para este propósito exacto. Informa cada una de la cantidad de líneas en cada idioma, junto con la cantidad de líneas que son comentarios, etc.

Ejemplo de uso y salida:

$ cloc --exclude-lang=DTD,Lua,make,Python .
    2570 text files.
    2200 unique files.                                          
    8654 files ignored.

http://cloc.sourceforge.net v 1.53  T=8.0 s (202.4 files/s, 99198.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Javascript                    1506          77848         212000         366495
CSS                             56           9671          20147          87695
HTML                            51           1409            151           7480
XML                              6           3088           1383           6222
-------------------------------------------------------------------------------
SUM:                          1619          92016         233681         467892
-------------------------------------------------------------------------------

214
2018-02-25 18:29



En los sistemas tipo UNIX, hay una herramienta llamada cloc que proporciona estadísticas de código.

Ejecuté un directorio aleatorio en nuestra base de código que dice:

      59 text files.
      56 unique files.                              
       5 files ignored.

http://cloc.sourceforge.net v 1.53  T=0.5 s (108.0 files/s, 50180.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               36           3060           1431          16359
C/C++ Header                    16            689            393           3032
make                             1             17              9             54
Teamcenter def                   1             10              0             36
-------------------------------------------------------------------------------
SUM:                            54           3776           1833          19481
-------------------------------------------------------------------------------

87
2018-05-16 16:03



No especificó cuántos archivos hay o cuál es el resultado deseado. Es esto lo que estás buscando:

find . -name '*.php' | xargs wc -l

29
2017-08-31 17:48



Sin embargo, otra variación :)

$ find -name '*.php' | xargs cat | wc -l

Editar: esto dará la suma total, en lugar de archivo por archivo.


20
2017-08-01 12:01



Hay una pequeña herramienta llamada sloccount contar las líneas de código en el directorio. Cabe señalar que hace más de lo que desea, ya que ignora las líneas vacías / comentarios, agrupa los resultados por lenguaje de programación y calcula algunas estadísticas.


17
2017-08-31 17:52



Más común y simple en cuanto a mí, supongamos que necesita contar archivos de diferentes extensiones de nombre (por ejemplo, también nativos)

wc `find . -name '*.[h|c|cpp|php|cc]'`

17
2017-10-06 03:23



POSIX

Líneas en cada archivo:

find . -name '*.php' -type f | xargs wc -l

Líneas en cada archivo, ordenadas por ruta de archivo

find . -name '*.php' -type f | sort | xargs wc -l

Líneas en cada archivo, ordenadas por número de líneas, descendiendo

find . -name '*.php' -type f | xargs wc -l | sort -nr

Total de líneas en todos los archivos

find . -name '*.php' -type f | xargs cat | wc -l

16
2017-08-28 23:08