질문자 :user77413
PHP 애플리케이션이 있고 특정 디렉토리와 그 하위 디렉토리 아래에 있는 모든 코드 라인을 계산하려고 합니다.
우리는 대략적인 아이디어를 얻으려는 것이므로 주석을 무시할 필요가 없습니다.
wc -l *.php
해당 명령은 지정된 디렉토리에 대해 잘 작동하지만 하위 디렉토리는 무시합니다. 다음 주석이 작동할 수 있다고 생각했지만 74를 반환합니다. 이는 확실히 사실이 아닙니다...
find . -name '*.php' | wc -l
디렉토리의 모든 파일을 재귀적으로 공급하는 올바른 구문은 무엇입니까?
노력하다:
find . -name '*.php' | xargs wc -l
또는 (파일 이름에 공백과 같은 특수 문자가 포함된 경우)
find . -name '*.php' | sed 's/.*/"&"/' | xargs wc -l
SLOCCount 도구도 도움이 될 수 있습니다.
어떤 계층을 가리키든 정확한 소스 코드 줄 수와 몇 가지 추가 통계를 제공합니다.
정렬된 출력:
find . -name '*.php' | xargs wc -l | sort -nr
Peter Elespuru다른 한 줄짜리:
( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l
공백이 있는 이름에서 작동하며 하나의 숫자만 출력합니다.
Shizzmo최신 버전의 Bash(또는 ZSH)를 사용하는 경우 훨씬 간단합니다.
wc -l **/*.php
Bash 셸에서는 globstar
옵션을 설정 **
glob-operator가 재귀적이지 않습니다. 이 설정을 사용하려면 다음을 실행하십시오.
shopt -s globstar
이것을 영구적으로 만들려면 초기화 파일( ~/.bashrc
, ~/.bash_profile
등) 중 하나에 추가하십시오.
Michael Wild이 정확한 목적을 위해 빌드된 cloc
유틸리티를 사용할 수 있습니다. 각 언어의 줄 수와 주석 수 등을 보고합니다. 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 -------------------------------------------------------------------------------
simao유닉스 계열 시스템에는 코드 통계를 제공하는 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 -------------------------------------------------------------------------------
Calmarius얼마나 많은 파일이 있는지 또는 원하는 출력이 무엇인지 지정하지 않았습니다.
이것은 당신이 찾고 있는 것일 수 있습니다:
find . -name '*.php' | xargs wc -l
Paweł Polewicz또 다른 변형 :)
$ find . -name '*.php' | xargs cat | wc -l
이렇게 하면 파일 단위가 아닌 총 합계가 표시됩니다.
추가 .
작동하도록 find
후.
Motiejus Jakštys사용은 찾을 수 의 -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; }'
jonhattan나처럼 더 일반적이고 간단하게 다른 이름 확장명(예: 네이티브)의 파일을 계산해야 한다고 가정합니다.
wc $(find . -type f | egrep "\.(h|c|cpp|php|cc)" )
sergeych포식스
여기에 있는 대부분의 다른 답변과 달리, 이는 모든 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
Paul Draper디렉토리의 코드 줄 수를 세는 sloccount 라는 작은 도구가 있습니다.
빈 줄/주석을 무시하고 프로그래밍 언어별로 결과를 그룹화하고 일부 통계를 계산하므로 원하는 것보다 더 많은 작업을 수행한다는 점에 유의해야 합니다.
sebasgoTokei 도구는 디렉토리의 코드에 대한 통계를 표시합니다. 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를 설치할 수 있습니다.
Joel Ellis간단한 for
루프를 원합니다.
total_count=0 for file in $(find . -name *.php -print) do count=$(wc -l $file) let total_count+=count done echo "$total_count"
ennuikiller소스 전용:
wc `find`
필터링하려면 grep 을 사용하십시오.
wc `find | grep .php$`
kekszumquadratfind
모든 검색/필터링 기능을 사용하고, xargs
를 사용하지 않고 이름에 재미있는 기호가 있는 파일과 잘 작동합니다. (덕분 쓸데없이 높은 외부 명령의 수를 실행하지 +
에 대한 find
의 -exec
). 여기 있습니다:
find . -name '*.php' -type f -exec cat -- {} + | wc -l
gniourf_gniourf질문에 bash 태그가 지정되어 있다는 것을 알고 있지만 해결하려는 문제도 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
보시다시피 제공된 정보는 개발자의 관점에서 훨씬 더 유용합니다. 작업을 시작하기 전에 프로젝트가 얼마나 복잡한지 대략적으로 알려줄 수 있기 때문입니다.
Ja͢ck지금까지 어떤 답변도 공백이 있는 파일 이름 문제를 해결하지 못했습니다.
xargs
를 사용하는 모든 것은 트리의 전체 경로 길이가 셸 환경 크기 제한(Linux에서는 기본적으로 몇 메가바이트)을 초과하는 경우 실패할 수 있습니다.
다음은 이러한 문제를 매우 직접적인 방식으로 해결하는 방법입니다. 서브쉘은 공백이 있는 파일을 처리합니다. awk
wc
출력의 스트림을 합산하므로 공간이 부족하지 않아야 합니다. exec
를 파일로만 제한합니다(디렉토리 건너뛰기).
find . -type f -name '*.php' -exec bash -c 'wc -l "$0"' {} \; | awk '{s+=$1} END {print s}'
Gene화장실 - 엘 ? GREP -C를 더 잘 사용하십시오 ^
wc -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 of '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
트랩을 조심하십시오 (줄이 아닌 카운트가 들어갑니다!!!).
ZnikWindows 의 경우 쉽고 빠른 도구는 LocMetrics 입니다.
walvcodel
( link )이라는 유틸리티를 사용할 수 있습니다. 다채로운 형식으로 줄 수를 세는 간단한 Python 모듈입니다.
설치
pip install codel
용법
.cpp
및 .h
확장자 포함)의 줄 수를 계산하려면 다음을 사용합니다.
codel count -e .cpp .h
.gitignore 형식의 일부 파일/폴더를 무시할 수도 있습니다.
codel count -e .py -i tests/**
tests/
폴더의 모든 파일을 무시합니다.
출력은 다음과 같습니다.
![긴 출력](https://i.stack.imgur.com/dNckF.jpg)
-s
플래그를 사용하여 출력을 줄일 수도 있습니다. 각 파일의 정보를 숨기고 각 확장자에 대한 정보만 표시합니다. 예는 아래와 같습니다.
![짧은 출력](https://i.stack.imgur.com/ctJED.jpg)
voilalex결과를 줄 수로 정렬하려면 | sort
또는 | sort -r
다음과 같이 첫 번째 답변에 -r( -r
| sort -r
find . -name '*.php' | xargs wc -l | sort -r
Paul Pettengill가장 긴 파일을 먼저 제공하고(즉, 이러한 긴 파일에 약간의 리팩토링이 필요한가요?) 일부 공급업체 디렉토리는 제외합니다.
find . -name '*.php' | xargs wc -l | sort -nr | egrep -v "libs|tmp|tests|vendor" | less
Matt아주 간단하게:
find /path -type f -name "*.php" | while read FILE do count=$(wc -l < $FILE) echo "$FILE has $count lines" done
ghostdog74다른 것:
wc -l `tree -if --noreport | grep -e'\.php$'`
이것은 잘 작동하지만 현재 폴더 또는 그 하위 폴더 중 하나에 적어도 하나의 *.php
wc
중단됩니다.
navZ 셸 (zsh) globs를 사용하면 매우 쉽습니다.
wc -l ./**/*.php
Bash를 사용하는 경우 업그레이드만 하면 됩니다. Bash를 사용할 이유가 전혀 없습니다.
HappyFace단순하게 유지하려면 중개자를 제거하고 모든 파일 이름으로 wc
wc -l `find . -name "*.php"`
또는 현대 구문에서:
wc -l $(find . -name "*.php")
이것은 디렉토리 이름이나 파일 이름에 공백이 없는 한 작동합니다. 그리고 수만 개의 파일이 없는 한(현대 쉘은 정말 긴 명령줄을 지원합니다). 프로젝트에 74개의 파일이 있으므로 성장할 여지가 충분합니다.
alexis파일이 너무 많으면 총 줄 수를 찾는 것이 좋습니다.
find . -name '*.php' | xargs wc -l | grep -i ' total' | awk '{print $1}'
bharath예를 들어 PHP 파일에 총 라인 수가 필요한 경우 GnuWin32가 설치되어 있으면 Windows에서도 매우 간단한 한 줄 명령을 사용할 수 있습니다. 이와 같이:
cat `/gnuwin32/bin/find.exe . -name *.php` | wc -l
find.exe가 정확히 어디에 있는지 지정해야 합니다. 그렇지 않으면 Windows에서 제공하는 FIND.EXE (이전 DOS와 유사한 명령에서)가 실행됩니다. 환경 PATH에서 GnuWin32 이전에 있고 다른 매개변수와 결과를 가질 수 있기 때문입니다.
위의 명령에서 작은따옴표가 아닌 역따옴표를 사용해야 합니다.
Neven Boyanov스크립트가 마음에 들지만 다음과 같은 경우 파일별 요약도 표시하므로 이 스크립트를 선호합니다.
wc -l `find . -name "*.php"`
akiva이러한 복잡하고 기억하기 어려운 명령은 모두 필요하지 않습니다. line-counter 라는Python 도구만 있으면 됩니다.
빠른 개요
도구를 얻는 방법은 다음과 같습니다.
$ 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 Cc 72 Dir A/file D.py 268 file A.py 467 file Bc 32 file count: 4 line count: 839
그리고 이 도구의 가장 좋은 점은 .gitignore
같은 구성 파일을 추가할 수 있다는 것입니다. '.gitignore'에서 하는 것처럼 계산할 파일의 종류를 선택하거나 무시하는 규칙을 설정할 수 있습니다.
자세한 설명 및 사용법은 여기: https://github.com/MorganZhang100/line-counter
Morgan Zhang출처 : http:www.stackoverflow.com/questions/1358540/how-can-i-count-all-the-lines-of-code-in-a-directory-recursively