[bash] 디렉토리의 모든 코드 줄을 재귀 적으로 계산하는 방법은 무엇입니까?

우리는 PHP 응용 프로그램을 가지고 있으며 특정 디렉토리와 하위 디렉토리에서 모든 코드 줄을 계산하려고합니다. 우리는 단지 거친 아이디어를 얻으려고 노력하기 때문에 의견을 무시할 필요가 없습니다.

wc -l *.php 

이 명령은 주어진 디렉토리 내에서 훌륭하게 작동하지만 하위 디렉토리는 무시합니다. 나는 이것이 효과가 있다고 생각했지만 74를 반환하고 있지만, 그렇지 않습니다 …

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

모든 파일을 제공하는 올바른 구문은 무엇입니까?



답변

시험:

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

SLOCCount 도구도 도움이 될 수 있습니다.

그것은 당신이 가리키는 어떤 계층 구조와 몇 가지 추가 통계에 대한 정확한 소스 코드 줄을 줄 것입니다.

정렬 된 출력 :

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


답변

다른 하나의 라이너 :

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

공백이있는 이름에서 작동하며 하나의 숫자 만 출력합니다.


답변

최신 버전의 Bash (또는 ZSH)를 사용하는 경우 훨씬 간단합니다.

wc -l **/*.php

Bash 셸에서는 globstar옵션을 설정 해야하며 , 그렇지 않으면 **glob 연산자가 재귀 적이 지 않습니다. 이 설정을 사용하려면 발행

shopt -s globstar

이 영구적하려면 초기화 파일 중 하나 (에 추가 ~/.bashrc, ~/.bash_profile등).


답변

cloc이 정확한 목적으로 만들어진 유틸리티를 사용할 수 있습니다 . CLOC는 Linux, Mac 및 Windows에서 사용 가능합니다. CLOC는 Linux, Mac 및 Windows에서 사용 가능합니다.

사용법 및 출력 예 :

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


답변

UNIX 계열 시스템 cloc에는 코드 통계를 제공 하는 도구가 있습니다.

코드베이스의 임의 디렉토리에서 실행되었습니다.

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


답변

파일 수 또는 원하는 출력을 지정하지 않았습니다. 이것이 당신이 찾고있는 것입니까?

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


답변

또 다른 변형 🙂

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

편집 : 파일 단위 대신 총 합계를 제공합니다.

Edit2 : 작동하도록 추가 .find