답변:
시험:
find . -name '*.php' | xargs wc -l
SLOCCount 도구도 도움이 될 수 있습니다.
그것은 당신이 가리키는 어떤 계층 구조와 몇 가지 추가 통계에 대한 정확한 소스 코드 줄을 줄 것입니다.
정렬 된 출력 :
find . -name '*.php' | xargs wc -l | sort -nr
find . -name '*.php' -o -name '*.inc' | xargs wc -l
wc여러 번 실행 되기 때문에 많은 특수 파일 이름을 처리하지 않습니다)
find . -name "*.php" -not -path "./tests*" | xargs wc -l
다른 하나의 라이너 :
( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l
공백이있는 이름에서 작동하며 하나의 숫자 만 출력합니다.
man find.. xargs -0이있는 print0을 사용하면 이름에 공백이나 다른 이상한 문자가있는 파일을 조작 할 수 있습니다.
( find . \( -name '*.h' -o -name '*.cpp' \) -print0 | xargs -0 cat ) | wc -l
최신 버전의 Bash (또는 ZSH)를 사용하는 경우 훨씬 간단합니다.
wc -l **/*.php
Bash 셸에서는 globstar옵션을 설정 해야하며 , 그렇지 않으면 **glob 연산자가 재귀 적이 지 않습니다. 이 설정을 사용하려면 발행
shopt -s globstar
이 영구적하려면 초기화 파일 중 하나 (에 추가 ~/.bashrc, ~/.bash_profile등).
globstar를 설정 해야합니다.
wc -l **/*.[ch]가있는 @PeterSenna 명령 은 총 15195373 줄을 찾습니다. "매우 낮은 값"으로 간주하는지 확실하지 않습니다. 다시, globstarBash에서 활성화 했는지 확인해야합니다 . 로 확인할 수 있습니다 shopt globstar. 명시 적으로 활성화하려면을 수행하십시오 shopt -s globstar.
ARG_MAX수가 많은 경우 여전히 오버플로 됩니다 . .phpwc
find공백이 있으면 허용 된 답변이 실패 합니다. 즉 사용하여 고정 할 수 print0및 --null로 find와 xargs각각 전화.
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
-------------------------------------------------------------------------------
clocPerl 스크립트 일 뿐이므로 크로스 플랫폼 임을 분명히 하시겠습니까?
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
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.
또 다른 변형 :)
$ find . -name '*.php' | xargs cat | wc -l
편집 : 파일 단위 대신 총 합계를 제공합니다.
Edit2 : 작동하도록 추가 .후find
$ find -name \*\.php -print0 | xargs -0 cat | wc -l
find . -name '*.php' | xargs cat | wc -l... 이것은 파일 별과 총계를 준다 :find . -name '*.php' | xargs wc -l
놀랍게도 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; }'
find . -name '*.c' -print0 |xargs -0 wc -l. 즉,이 더 빠른 방법 (적어도 OS X에서)은 여러 번 "총"인쇄를 끝내므로 적절한 총계를 얻으려면 추가 필터링이 필요합니다 (자세한 내용은 답변에 게시).
wc의 양식은 cat먼저 시스템 (jsons의 2백기가바이트, 12K 파일로 테스트) 라인을 세기 시작하는 모든 GB를 처리해야하기 때문에 느립니다. 하고 wc그 결과를 계산 첫번째 것은 훨씬 빠릅니다
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
나보다 더 일반적이고 간단합니다. 다른 이름 확장자 (예 : 네이티브)의 파일을 계산해야한다고 가정하십시오.
wc $(find . -type f | egrep "\.(h|c|cpp|php|cc)" )
의견을 보내 주셔서 감사합니다. 수정했습니다.
$()
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
디렉토리에서 코드 줄을 세는 sloccount 라는 작은 도구가 있습니다 . 빈 줄 / 주석을 무시하고 프로그래밍 언어별로 결과를 그룹화하고 일부 통계를 계산하므로 원하는 것보다 더 많이 수행해야합니다.
원하는 것은 간단한 for루프입니다.
total_count=0
for file in $(find . -name *.php -print)
do
count=$(wc -l $file)
let total_count+=count
done
echo "$total_count"
xargs않습니까?
IFS=$'\n'루프 전에 설정하면 이름에 줄 바꿈이있는 파일을 제외한 모든 파일에 대해 적어도 루프를 수정합니다. 둘째, 인용하지 않으므로 '*.php'셸이 확장하지 않고 findergo는 실제로 하위 디렉토리에서 PHP 파일을 찾지 않습니다. 또한 -print다른 작업이 없기 때문에 암시 적입니다.
소스에만 해당 :
wc `find`
필터링하려면 grep을 사용하십시오.
wc `find | grep .php$`
find너무 빠른 파일은 너무 많은 파일 (번호 인수 오버플로)이있을 때 실패하지 않고 의 모든 검색 / 필터링 기능을 사용하며 이름에 재미있는 기호가있는 파일을 사용하지 않고 잘 작동합니다 xargs. 외부 명령의 쓸데없이 많은 수의 (덕분 +에 find의 -exec). 여기 있습니다 :
find . -name '*.php' -type f -exec cat -- {} + | wc -l
\;대신 이 변형을 게시하려고 +했지만이 답변이 정답이어야합니다.
질문에 태그가 붙어 있음을 알고 있습니다 세게 때리다하지만 해결하려는 문제는 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
보시다시피 제공된 정보는 프로젝트를 시작하기 전에 프로젝트가 얼마나 복잡한지를 대략적으로 알 수 있기 때문에 개발자의 관점에서 훨씬 유용합니다.
아무도 묻지 않을 것 같아요 ... 지금까지 답은 공백이있는 파일 이름 문제에 대해서는 얻지 못했습니다. 또한 xargs트리의 전체 경로 길이가 셸 환경 크기 제한 (Linux의 경우 기본적으로 몇 메가 바이트)을 초과하면 모든 사용 에 실패 할 수 있습니다. 다음은 이러한 문제를 직접적으로 수정하는 방법입니다. 서브 쉘은 공백이있는 파일을 처리합니다. awk개별 파일 wc출력 의 총계 이므로 공간이 부족하지 않아야합니다. 또한 exec파일 만 제한합니다 (디렉토리 생략).
find . -type f -name '*.php' -exec bash -c 'wc -l "$0"' {} \; | awk '{s+=$1} END {print s}'
화장실 -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 트랩을 조심하십시오 (줄이 아니라 숫자가 들어갑니다!)
find -type f -name '*.php' -print0 | xargs -0 grep -ch ^ | paste -sd+ - | bc 대안 여기를 참조하십시오 bc: stackoverflow.com/q/926069/2400328
아주 간단히
find /path -type f -name "*.php" | while read FILE
do
count=$(wc -l < $FILE)
echo "$FILE has $count lines"
done
결과를 줄 수별로 정렬 하려면 첫 번째 답변 에 | sort또는 | sort -r( -r내림차순)을 다음과 같이 추가하면됩니다.
find . -name '*.php' | xargs wc -l | sort -r
xargs wc -l숫자입니다, 하나는 실제로 사용해야합니다 sort -n또는 sort -nr.
들어 윈도우 , 쉽고 빠른 도구입니다 LocMetrics .
Linux를 사용하고 있다면 내가 사용하는 툴 polyglot을 추천한다 . 그것은보다 빠른 극적입니다 중 하나 sloccount또는 cloc그것보다 더 풍부한 기능입니다 sloccount.
당신은 그것을 호출 할 수 있습니다
poly .
또는
poly
따라서 복잡한 bash 스크립트보다 훨씬 사용자 친화적입니다.
도구 토 케이 는 코드에 대한 통계를 디렉토리에 표시합니다. 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를 설치할 수 있습니다 .
PHP 파일에 총 줄 수만 필요하다면 GnuWin32가 설치되어 있으면 Windows에서도 매우 간단한 한 줄 명령을 사용할 수 있습니다. 이처럼 :
cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l
find.exe의 위치를 정확히 지정해야합니다. 그렇지 않으면 Windows가 제공 한 FIND.EXE (이전 DOS와 같은 명령에서 실행)가 실행됩니다. 환경 PATH의 GnuWin32 이전에있을 수 있기 때문에 매개 변수와 결과가 다릅니다.
위의 명령에서 작은 따옴표가 아닌 큰 따옴표를 사용해야합니다.
간단하게 유지하려면 중개인을 잘라 내고 wc모든 파일 이름으로 전화 하십시오.
wc -l `find . -name "*.php"`
또는 현대 구문에서 :
wc -l $(find . -name "*.php")
디렉토리 이름이나 파일 이름에 공백이없는 한 작동합니다. 그리고 수만 개의 파일이없는 한 (현대 쉘은 실제로 긴 명령 행을 지원합니다). 프로젝트에 74 개의 파일이 있으므로 확장 할 공간이 충분합니다.
wc -l `find . -type f \( -name "*.cpp" -o -name "*.c" -o -name "*.h" \) -print`
복잡하고 기억하기 어려운 명령이 모두 필요한 것은 아닙니다. 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입니다.