코드 라인을 세고 있습니까? 줄을 세고

코드 줄을 세고 싶다면 사소한 것은

cat *.c *.h | wc -l

그러나 하위 디렉토리가 여러 개인 경우 어떻게해야합니까?



답변

가장 쉬운 방법은이라는 도구를 사용하는 것 cloc입니다. 이 방법으로 사용하십시오 :

cloc .

그게 다야. 🙂


답변

SLOCCount 또는 cloc 를 사용해야 할 것 입니다. 디렉토리 구조 등에 관계없이 프로젝트에서 소스 코드 라인을 계산하도록 특별히 설계되었습니다. 어느 한 쪽

sloccount .

또는

cloc .

현재 디렉토리에서 시작하여 모든 소스 코드에 대한 보고서를 생성합니다.

findand 을 사용하려면 wcGNU wc에 좋은 --files0-from옵션이 있습니다.

find . -name '*.[ch]' -print0 | wc --files0-from=-

( cloc 제안에 대해 SnakeDoc 에게 감사드립니다 !)


답변

wc명령은 여러 개의 인수를 취할 수 있으므로 GNU 작업의 인수 를 wc사용하여 모든 파일 이름을 전달할 수 있습니다 .+-execfind

find . -type f -name '*.[ch]' -exec wc -l {} +

또는 bash에서 쉘 옵션 globstar을 사용 하여 디렉토리를 재귀 적으로 순회합니다.

shopt -s globstar
wc -l **/*.[ch]

다른 쉘은 기본적으로 재귀 적으로 순회 zsh하거나 (예 🙂 globstar적어도 대부분의 것과 비슷한 옵션을 갖습니다 .


답변

당신은 사용할 수 find와 함께 xargs하고 wc:

find . -type f -name '*.h' -o -name '*.c' | xargs wc -l

답변

당신이 cloc등에 액세스 할 수없는 환경에 있다면 나는 제안 할 것입니다

find -name '*.[ch]' -type f -exec cat '{}' + | grep -c '[^[:space:]]'

런스 루 : find이름이 .c또는로 끝나는 모든 일반 파일을 재귀 적으로 검색 합니다. 공백이 아닌 모든 행 (간격이 아닌 문자가 하나 이상 포함 된 행)을 계산하기 위해 출력이 파이프됩니다 ..hcatgrep


답변

의견에서 지적 된 바와 같이, cat file | wc -l하지 에 해당 wc -l file후자 인쇄 번호와 파일 이름 반면 이전 인쇄 때문에 단지 숫자입니다. 마찬가지로 cat * | wc -l숫자 만 wc -l *인쇄하고 각 파일에 대한 정보 줄을 인쇄합니다.

단순성의 정신으로 실제로 묻는 질문을 다시 살펴 보겠습니다.

코드 줄을 세고 싶다면 사소한 것은

cat *.c *.h | wc -l

그러나 하위 디렉토리가 여러 개인 경우 어떻게해야합니까?

첫째, 사소한 명령조차 단순화하여 다음을 수행 할 수 있습니다.

cat *.[ch] | wc -l

마지막으로 many-subdirectory에 해당하는 것은 다음과 같습니다.

find . -name '*.[ch]' -exec cat {} + | wc -l

추가하여 일치하는 파일을 디렉토리가 아닌 일반 파일로만 제한하는 등 여러 가지 방법으로 향상시킬 수 있습니다. -type f그러나 지정된 find명령 은와 정확히 동일 cat *.[ch]합니다.


답변

다음을 사용하는 샘플 awk:

find . -name '*.[ch]' -exec wc -l {} \; |
  awk '{SUM+=$1}; END { print "Total number of lines: " SUM }'