코드 줄을 세고 싶다면 사소한 것은
cat *.c *.h | wc -l
그러나 하위 디렉토리가 여러 개인 경우 어떻게해야합니까?
답변
답변
SLOCCount 또는 cloc 를 사용해야 할 것 입니다. 디렉토리 구조 등에 관계없이 프로젝트에서 소스 코드 라인을 계산하도록 특별히 설계되었습니다. 어느 한 쪽
sloccount .
또는
cloc .
현재 디렉토리에서 시작하여 모든 소스 코드에 대한 보고서를 생성합니다.
find
and 을 사용하려면 wc
GNU wc
에 좋은 --files0-from
옵션이 있습니다.
find . -name '*.[ch]' -print0 | wc --files0-from=-
답변
이 wc
명령은 여러 개의 인수를 취할 수 있으므로 GNU 작업의 인수 를 wc
사용하여 모든 파일 이름을 전달할 수 있습니다 .+
-exec
find
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
또는로 끝나는 모든 일반 파일을 재귀 적으로 검색 합니다. 공백이 아닌 모든 행 (간격이 아닌 문자가 하나 이상 포함 된 행)을 계산하기 위해 출력이 파이프됩니다 ..h
cat
grep
답변
의견에서 지적 된 바와 같이, 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 }'