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


1623

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

wc -l *.php 

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

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

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

답변:


2649

시험:

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

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

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

정렬 된 출력 :

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


31
cloc.sourceforge.net 은 sloccount (언어는 많지만 정보는 적음)의 대안으로 볼 가치가 있습니다.
AsTeR

31
포함 파일 포함 :find . -name '*.php' -o -name '*.inc' | xargs wc -l
rymo

52
파일이 많을 때 하나 이상의 숫자를 인쇄합니다 ( wc여러 번 실행 되기 때문에 많은 특수 파일 이름을 처리하지 않습니다)
l0b0

42
@idober :find . -name "*.php" -not -path "./tests*" | xargs wc -l
endre

19
디렉토리 이름에 공백이 있으면 위의 명령이 실패합니다 !!
nitish712

474

다른 하나의 라이너 :

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

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


1
+1 ditto ... 영원히 검색 ... 다른 모든 "find"명령은 실제 ​​파일 수만 반환했습니다 ....- print0 항목은 실제 줄 수를 나타냅니다 !!! 감사!
Ronedog

3
@ TorbenGundtofte-Bruun-참조 man find.. xargs -0이있는 print0을 사용하면 이름에 공백이나 다른 이상한 문자가있는 파일을 조작 할 수 있습니다.
Shizzmo

2
@ TorbenGundtofte-Bruun-또한 xargs의 -0은 print0에 해당하며 공백을 처리하는 일종의 인코딩 / 디코딩입니다.
Tristan Reid

7
하나 이상의 이름 필터가 필요하다면, (적어도 MSYSGit 버전의 find와 함께), 추가 ( find . \( -name '*.h' -o -name '*.cpp' \) -print0 | xargs -0 cat ) | wc -l
구문

1
@DesignbyAdrian : 저널링은 속도가 아니라 응급 복구에 도움이됩니다. 캐싱 또는 매우 빠른 HDD로 인해 성능이 좋을 수 있습니다.
jmh

398

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

wc -l **/*.php

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

shopt -s globstar

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


7
나는 이것을 단순화하기 위해 찬성하고 있지만 디렉토리를 재귀 적으로 검색하는 것처럼 보이지 않고 현재 디렉토리의 하위 디렉토리 만 검사한다는 것을 지적하고 싶습니다. 이것은 SL6.3에 있습니다.
Godric Seer

7
쉘과 설정 한 옵션에 따라 다릅니다. 이 작업을 하려면 Bash globstar를 설정 해야합니다.
Michael Wild

2
현재 3.9.8 커널 아카이브 wc -l **/*.[ch]가있는 @PeterSenna 명령 은 총 15195373 줄을 찾습니다. "매우 낮은 값"으로 간주하는지 확실하지 않습니다. 다시, globstarBash에서 활성화 했는지 확인해야합니다 . 로 확인할 수 있습니다 shopt globstar. 명시 적으로 활성화하려면을 수행하십시오 shopt -s globstar.
Michael Wild

5
@MichaelWild 이것은 좋은 솔루션이지만 내장 파일 이 아니기 때문에 파일 ARG_MAX수가 많은 경우 여전히 오버플로 됩니다 . .phpwc
Monica Monica 복원

1
@AlbertSamuel 아니요, 두 가지 방법으로 생성 된 파일 목록을 비교해야합니다. @BroSlow에서 언급했듯이 내 방법에는 많은 파일이 작동하지 않는 문제가 있습니다. 경로에 find공백이 있으면 허용 된 답변이 실패 합니다. 즉 사용하여 고정 할 수 print0--nullfindxargs각각 전화.
Michael Wild

363

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

4
그것은 훌륭하고 빠르게 유용한 통계를주는 멋진 도구입니다. 그것을 사랑하십시오.
Rob Forrest

4
cygwin (또는 다른 유사한 포트 / 환경)을 사용하여 Windows에서 Unix 명령을 실행할 수 있습니다. 나에게 이런 종류의 액세스가 매우 유용하기 때문에 필연적입니다. 유닉스 커맨드 라인은 마법입니다. 나는 특히 펄과 정규 표현식을 좋아한다.
커티스 얄롭

CLOC 및 SLOCCount는 2015 년 중반 맥북에서 잘 작동합니다. 127k Java Android 프로젝트의 경우 숫자는 비슷하지만 정확히 동일하지는 않습니다. 또한 iOS에 해당하는 LoC는 2 배입니다. 따라서 SLOCCount의 "비용"측정 항목이 꺼져있을 수 있습니다 (또는 iOS 개발자가 Android 개발자가 만든 것의 2 배를 만들 수도 있습니다. :-)
maxweber

2
이 질문의 시작 부분을 편집하여 clocPerl 스크립트 일 뿐이므로 크로스 플랫폼 임을 분명히 하시겠습니까?
Kyle Strand

물론 완벽합니다 .Windows bash에서도 잘 작동합니다.
yurisnm

100

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

2
@moose는 기술적으로 simtao가 리눅스 또는 유닉스를 전혀 언급하지 않고 Windows 사용자를위한 솔루션으로 구체적으로 언급했습니다.
Tim Seguine

5
@ moose Table은 내 대답보다 훨씬 늦게 그의 대답으로 편집되었습니다. 이제 두 가지가 실제로 비슷합니다.
Calmarius

나는 그것을 좋아한다. cloc은 정말 깔끔합니다. 그러나 그 이름은 무엇을 의미합니까?
Manoel Vilela

이제 Windows에도 있습니다! 당신이 초콜릿을choco install cloc
먹었다 고

35

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

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

2
파일이 너무 많지 않은 한 작동합니다. 파일이 많으면 결과로 여러 줄이 표시됩니다 (xargs는 파일 목록을 여러 하위 목록으로 나눕니다)
Pascal MARTIN

어 그래. 그래서 나는 그가 얼마나 많은 파일이 있는지 지정하지 않았다고 말했다. 내 버전은 기억하기 쉽지만 파일이 여러 개인 경우 Shin 버전이 더 좋습니다. 투표하고 있습니다.
Paweł Polewicz

작은 따옴표가 너무 제한적인 함수에서 사용하기 위해 이것을 조정해야했습니다. go () { mkdir /tmp/go; [[ -f ./"$1" ]] && mv ./"$1" /tmp/go; (find ./ -type f -name "$*" -print0 | xargs -0 cat ) | wc -l; wc -l /tmp/go/*; mv /tmp/go/* . } 결과가 slocount에 가깝지만 *.py알지 못했습니다.*.js , *.html.
jalanb

31

또 다른 변형 :)

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

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

Edit2 : 작동하도록 추가 .find


두 답변 모두 줄을 합산합니다.
josh123a123

: Cygwin에서 적어도, 나는 더 나은 결과를 가지고 있었다$ find -name \*\.php -print0 | xargs -0 cat | wc -l
마틴 Haeberli을

다윈에서, 이것은 단지 총계를 준다 : find . -name '*.php' | xargs cat | wc -l... 이것은 파일 별과 총계를 준다 :find . -name '*.php' | xargs wc -l
OsamaBinLogin

30

놀랍게도 find -exec와 에 근거한 답은 없습니다 awk. 여기 우리는 간다 :

find . -type f -exec wc -l {} \; | awk '{ SUM += $0} END { print SUM }'

이 스 니펫은 모든 파일 ( -type f)을 찾습니다 . 파일 확장자로 찾으려면 -name다음을 사용하십시오 .

find . -name '*.py' -exec wc -l '{}' \; | awk '{ SUM += $0; } END { print SUM; }'

2
기능적으로 이것은 완벽하게 작동하지만 큰 목록 (Linux 소스)에서는 모든 파일에 대해 1wc 프로세스 대신 각 파일에 대해 wc 프로세스를 시작하기 때문에 실제로 느립니다. 나는이 방법을 사용하여 31 초에 시간을 정한 것에 비해 1.5 초를 사용했습니다 find . -name '*.c' -print0 |xargs -0 wc -l. 즉,이 더 빠른 방법 (적어도 OS X에서)은 여러 번 "총"인쇄를 끝내므로 적절한 총계를 얻으려면 추가 필터링이 필요합니다 (자세한 내용은 답변에 게시).
Doug Richardson

이것은 파일을 무제한으로 작업 할 수 있다는 이점이 있습니다. 잘 했어!
ekscrypto

1
이것은 대량의 GB 및 파일로 작업 한 후에 훨씬 더 나은 솔루션입니다. 하나를 수행 wc의 양식은 cat먼저 시스템 (jsons의 2백기가바이트, 12K 파일로 테스트) 라인을 세기 시작하는 모든 GB를 처리해야하기 때문에 느립니다. 하고 wc그 결과를 계산 첫번째 것은 훨씬 빠릅니다
ulkas

1
@DougRichardson, 대신 이것을 고려할 수 있습니다 : find . -type f -exec wc -l {} \+또는 find . -name '*.py' -type f -exec wc -l {} \+ 출력의 끝에 합계를 인쇄합니다. 관심있는 모든 것이 합계라면 조금 더 나아가서 다음을 사용할 수 있습니다 tail. find . -type f -exec wc -l {} \+ | tail -1또는find . -name '*.py' -type f -exec wc -l {} \+ | tail -1
JamieJag

25

나보다 더 일반적이고 간단합니다. 다른 이름 확장자 (예 : 네이티브)의 파일을 계산해야한다고 가정하십시오.

wc $(find . -type f | egrep "\.(h|c|cpp|php|cc)" )

의견을 보내 주셔서 감사합니다. 수정했습니다.


6
이것은 당신이 생각하는 것을하지 않습니다. 찾기 . -name ' . [am]'은 find와 동일합니다. -name ' | 모두 모든 파일을 찾을 것하는 .m 또는 .A과 끝 [A m]를.'
Omry Yadan

1
그러나 두 번째는.로 끝나는 파일도 찾습니다. | , 만약에 어떠한. 따라서 [h | c | cpp | php | cc]는 [hcp |]와 같습니다.
OsamaBinLogin

백틱은 더 이상 사용되지 않으며 선호합니다$()
Sandburg

이것은 Cygwin에서 작동합니다. 물론 "C : \"드라이브는 다음과 같이 cygwin 규칙을 따라야합니다. wc $ (find / cygdrive / c // SomeWindowsFolderj / -type f | egrep "\. (h | c | cpp | php | cc) ")
Christian Gingras

21

POSIX

여기에있는 대부분의 다른 답변과 달리이 방법은 POSIX 시스템, 파일 수 및 파일 이름에 관계없이 작동합니다 (표시된 경우 제외).


각 파일의 줄 :

find . -name '*.php' -type f -exec wc -l {} \;
# faster, but includes total at end if there are multiple files
find . -name '*.php' -type f -exec wc -l {} +

파일 경로별로 정렬 된 각 파일의 줄

find . -name '*.php' -type f | sort | xargs -L1 wc -l
# for files with spaces or newlines, use the non-standard sort -z
find . -name '*.php' -type f -print0 | sort -z | xargs -0 -L1 wc -l

각 파일의 줄 수, 줄 수별로 정렬, 내림차순

find . -name '*.php' -type f -exec wc -l {} \; | sort -nr
# faster, but includes total at end if there are multiple files
find . -name '*.php' -type f -exec wc -l {} + | sort -nr

모든 파일의 총 줄

find . -name '*.php' -type f -exec cat {} + | wc -l

19

디렉토리에서 코드 줄을 세는 sloccount 라는 작은 도구가 있습니다 . 빈 줄 / 주석을 무시하고 프로그래밍 언어별로 결과를 그룹화하고 일부 통계를 계산하므로 원하는 것보다 더 많이 수행해야합니다.


창문의 경우 LocMetrics 가 일을합니다
Camille

15

원하는 것은 간단한 for루프입니다.

total_count=0
for file in $(find . -name *.php -print)
do
    count=$(wc -l $file)
    let total_count+=count
done
echo "$total_count"

3
이 과잉은 제안하는 답변과 비교되지 xargs않습니까?
Nathan Fellman

5
아냐, 네이선 xargs 답변이 반드시 카운트를 단일 숫자로 인쇄하지는 않습니다. 소계를 인쇄 할 수도 있습니다.
Rob Kennedy

3
파일 이름에 공백이 있으면이 프로그램은 어떻게합니까? 줄 바꿈은 어떻습니까? ;-)
Paweł Polewicz

38
파일 이름에 줄 바꿈이 있으면 더 큰 문제가 있다고 말하고 싶습니다.
Kzqai

2
@ennuikiller이 문제는 우선 공백이있는 파일에서 발생합니다. IFS=$'\n'루프 전에 설정하면 이름에 줄 바꿈이있는 파일을 제외한 모든 파일에 대해 적어도 루프를 수정합니다. 둘째, 인용하지 않으므로 '*.php'셸이 확장하지 않고 findergo는 실제로 하위 디렉토리에서 PHP 파일을 찾지 않습니다. 또한 -print다른 작업이 없기 때문에 암시 적입니다.
Monica Monica 복원

12

소스에만 해당 :

wc `find`

필터링하려면 grep을 사용하십시오.

wc `find | grep .php$`

11

find너무 빠른 파일은 너무 많은 파일 (번호 인수 오버플로)이있을 때 실패하지 않고 의 모든 검색 / 필터링 기능을 사용하며 이름에 재미있는 기호가있는 파일을 사용하지 않고 잘 작동합니다 xargs. 외부 명령의 쓸데없이 많은 수의 (덕분 +find-exec). 여기 있습니다 :

find . -name '*.php' -type f -exec cat -- {} + | wc -l

2
내가 모르는 \;대신 이 변형을 게시하려고 +했지만이 답변이 정답이어야합니다.
Mark K Cowan

7

질문에 태그가 붙어 있음을 알고 있습니다 하지만 해결하려는 문제는 PHP와 관련이있는 것 같습니다.

Sebastian Bergmann은 PHPLOC 라는 도구를 작성했습니다.이 도구 는 프로젝트의 복잡성에 대한 개요를 제공합니다. 다음은 보고서의 예입니다.

Size
  Lines of Code (LOC)                            29047
  Comment Lines of Code (CLOC)                   14022 (48.27%)
  Non-Comment Lines of Code (NCLOC)              15025 (51.73%)
  Logical Lines of Code (LLOC)                    3484 (11.99%)
    Classes                                       3314 (95.12%)
      Average Class Length                          29
      Average Method Length                          4
    Functions                                      153 (4.39%)
      Average Function Length                        1
    Not in classes or functions                     17 (0.49%)

Complexity
  Cyclomatic Complexity / LLOC                    0.51
  Cyclomatic Complexity / Number of Methods       3.37

보시다시피 제공된 정보는 프로젝트를 시작하기 전에 프로젝트가 얼마나 복잡한지를 대략적으로 알 수 있기 때문에 개발자의 관점에서 훨씬 유용합니다.


7

아무도 묻지 않을 것 같아요 ... 지금까지 답은 공백이있는 파일 이름 문제에 대해서는 얻지 못했습니다. 또한 xargs트리의 전체 경로 길이가 셸 환경 크기 제한 (Linux의 경우 기본적으로 몇 메가 바이트)을 초과하면 모든 사용 에 실패 할 수 있습니다. 다음은 이러한 문제를 직접적으로 수정하는 방법입니다. 서브 쉘은 공백이있는 파일을 처리합니다. awk개별 파일 wc출력 의 총계 이므로 공간이 부족하지 않아야합니다. 또한 exec파일 만 제한합니다 (디렉토리 생략).

find . -type f -name '*.php' -exec bash -c 'wc -l "$0"' {} \; | awk '{s+=$1} END {print s}' 

6

화장실 -L? 더 나은 GREP -C ^ 사용

화장실 -l? 잘못된! wc 명령은 줄이 아닌 새로운 줄 코드를 계산 합니다! 파일의 마지막 줄이 줄 바꿈으로 끝나지 않으면 계산되지 않습니다!

여전히 카운트 라인을 원한다면 grep -c ^를 사용하십시오 .

#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
     #you see use grep instead wc ! for properly counting
     count=$(grep -c ^ < "$FILE")
     echo "$FILE has $count lines"
     let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED:  $total

마지막으로, wc -l 트랩을 조심하십시오 (줄이 아니라 숫자가 들어갑니다!)


읽어주세요 행 POSIX 정의를 . 으로 grep -c ^당신의 수를 계산하고 불완전 라인 , 및 불완전 라인을에 표시 할 수없는 텍스트 파일 .
gniourf_gniourf

2
알아 실제로 마지막 줄만 EOL을 얻지 못해 불완전 할 수 있습니다. 아이디어는 불완전한 라인을 포함한 모든 라인을 계산합니다. 완전한 행만 계산하는 것은 매우 빈번한 실수입니다. 세고 난 후에 우리는 "왜 마지막 줄을 놓쳤는가 ???"라고 생각하고 있습니다. 이것이 왜 정답인지, 어떻게 레시피를 올바르게 만드는지에 대한 레시피입니다.
Znik

당신이 하나의 라이너를 원하는 경우 또는 : find -type f -name '*.php' -print0 | xargs -0 grep -ch ^ | paste -sd+ - | bc 대안 여기를 참조하십시오 bc: stackoverflow.com/q/926069/2400328
techniao

5

zsh globs를 사용하면 매우 쉽습니다.

wc -l ./**/*.php

bash를 사용하는 경우 업그레이드 만하면됩니다. bash를 사용해야 할 이유는 없습니다.


4

아주 간단히

find /path -type f -name "*.php" | while read FILE
do
    count=$(wc -l < $FILE)
    echo "$FILE has $count lines"
done

1
파일 이름 중 하나에 공백이나 줄 바꿈이 있으면 실패합니다.
Paweł Polewicz

4

결과를 줄 수별로 정렬 하려면 첫 번째 답변 에 | sort또는 | sort -r( -r내림차순)을 다음과 같이 추가하면됩니다.

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

1
의 출력이 있기 때문에 xargs wc -l숫자입니다, 하나는 실제로 사용해야합니다 sort -n또는 sort -nr.
Dustin Ingram 2019

4

들어 윈도우 , 쉽고 빠른 도구입니다 LocMetrics .


bash를 사용하는 경우 OP가 Windows에 거의 없을 것입니다.

1
@VanessaMcHale 질문 제목과 설명 모두 유닉스 전용 솔루션을 분명히 요구하지는 않습니다. 따라서 Windows 기반 솔루션이 허용됩니다. 또한 비슷한 솔루션을 찾고있을 때 Google 에서이 페이지를 가리 켰습니다.
walv

이 의견이 도움이되었습니다. 나는 이것을 시도했고 잘 작동한다.
Allan F

4

다른 것 :

wc -l `tree -if --noreport | grep -e'\.php$'`

이 벌금을 밖으로 작동,하지만 당신은 적어도 하나 개 있어야합니다 *.php현재 폴더에 파일이나 하위 폴더 중 하나, 또는 다른 wc포장 마차


수도도 ARG_MAX 오버 플로우
마크 K 코완

4

Linux를 사용하고 있다면 내가 사용하는 툴 polyglot을 추천한다 . 그것은보다 빠른 극적입니다 중 하나 sloccount또는 cloc그것보다 더 풍부한 기능입니다 sloccount.

당신은 그것을 호출 할 수 있습니다

poly .

또는

poly

따라서 복잡한 bash 스크립트보다 훨씬 사용자 친화적입니다.


4

도구 토 케이 는 코드에 대한 통계를 디렉토리에 표시합니다. Tokei는 파일 ​​수, 해당 파일 및 코드 내의 총 줄 수, 주석 및 언어별로 그룹화 된 공백을 표시합니다. Tokei는 Mac, Linux 및 Windows에서도 사용할 수 있습니다.

Tokei의 출력 예는 다음과 같습니다.

$ tokei
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 CSS                     2           12           12            0            0
 JavaScript              1          435          404            0           31
 JSON                    3          178          178            0            0
 Markdown                1            9            9            0            0
 Rust                   10          408          259           84           65
 TOML                    3           69           41           17           11
 YAML                    1           30           25            0            5
-------------------------------------------------------------------------------
 Total                  21         1141          928          101          112
-------------------------------------------------------------------------------

리포지토리의 README 파일에있는 지침에 따라 Tokei를 설치할 수 있습니다 .


1
이것은 정답
Elijas

3

PHP 파일에 총 줄 수만 필요하다면 GnuWin32가 설치되어 있으면 Windows에서도 매우 간단한 한 줄 명령을 사용할 수 있습니다. 이처럼 :

cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l

find.exe의 위치를 ​​정확히 지정해야합니다. 그렇지 않으면 Windows가 제공 한 FIND.EXE (이전 DOS와 같은 명령에서 실행)가 실행됩니다. 환경 PATH의 GnuWin32 이전에있을 수 있기 때문에 매개 변수와 결과가 다릅니다.

위의 명령에서 작은 따옴표가 아닌 큰 따옴표를 사용해야합니다.


위의 예에서 cmd.exe 대신 Windows 용 bash를 사용하고 있으므로 슬래시 "/"가 있고 백 슬래시 "\"가 아닙니다.
Neven Boyanov

3

가장 긴 파일을 먼저 제공하고 (예 :이 긴 파일에는 리팩토링이 필요할까요?) 일부 공급 업체 디렉토리는 제외합니다.

 find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less

3

간단하게 유지하려면 중개인을 잘라 내고 wc모든 파일 이름으로 전화 하십시오.

wc -l `find . -name "*.php"`

또는 현대 구문에서 :

wc -l $(find . -name "*.php")

디렉토리 이름이나 파일 이름에 공백이없는 한 작동합니다. 그리고 수만 개의 파일이없는 한 (현대 쉘은 실제로 긴 명령 행을 지원합니다). 프로젝트에 74 개의 파일이 있으므로 확장 할 공간이 충분합니다.


난이게 좋아! 하이브리드 C / C ++ 환경에있는 경우 :wc -l `find . -type f \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -print`
Bram

그것이 최고의 답변이 아니라는 것에 놀랐습니다
ms4720 1

3

복잡하고 기억하기 어려운 명령이 모두 필요한 것은 아닙니다. line-counter 라는 도구 만 있으면 됩니다.

빠른 개요

이것이 도구를 얻는 방법입니다

$ pip install line-counter

line현재 디렉토리에서 파일 수와 줄 수를 얻으려면 명령을 사용하십시오 (재귀 적으로)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

더 자세한 내용을 원하면을 사용하십시오 line -d.

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

그리고이 도구의 가장 중요한 부분은 .gitignore구성 파일과 같은 도구를 추가 할 수 있다는 것입니다. '.gitignore'에서하는 것처럼 계산할 파일 종류를 선택하거나 무시하도록 규칙을 설정할 수 있습니다.

자세한 설명과 사용법은 https://github.com/MorganZhang100/line-counter입니다.


3

파일이 너무 많으면 총 줄 수를 찾는 것이 좋습니다.

find . -name '*.php' | xargs wc -l | grep -i ' total' | awk '{print $1}'

2

OS X에서는 최소한 다른 답변에 나열된 find + xarg + wc 명령이 큰 목록에 여러 번 "합계"로 인쇄되며 전체 합계가 없습니다. 다음 명령을 사용하여 .c 파일에 대한 단일 합계를 얻을 수있었습니다.

find . -name '*.c' -print0 |xargs -0 wc -l|grep -v total|awk '{ sum += $1; } END { print "SUM: " sum; }'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.