Cygwin에서 실행하는 쉘 스크립트에서 wc 유틸리티를 사용하고 있는데 출력에 "total"이있는 줄이 두 개 이상 있음을 발견했습니다.왜 wc 유틸리티가 "total"이있는 여러 줄을 생성합니까?
다음 기능은 내 소스 파일에서 라인의 수를 계산하는 데 사용됩니다
count_curdir_src() {
find . '(' -name '*.vb' -o -name '*.cs' ')' \
-a '!' -iname '*.Designer.*' -a '!' -iname '.svn' -print0 | \
xargs -0 wc -l
}
그러나 특정 디렉토리의 출력은 다음과 같습니다
그것은 화장실 재설정과 같은$ find . '(' -name '*.vb' -o -name '*.cs' ')' -a '!' -iname '*.Designer.*' -a '!' -iname '.svn' -print0 | xargs -0 wc -l
19 ./dirA/fileABC.cs
640 ./dirA/subdir1/fileDEF.cs
507 ./dirA/subdir1/fileGHI.cs
2596 ./dirA/subdir1/fileJKL.cs
(...many others...)
58 ./dirB/fileMNO.cs
36 ./dirB/subdir1/filePQR.cs
122200 total
6022 ./dirB/subdir2/subsubdir/fileSTU.cs
24 ./dirC/fileVWX.cs
(...)
36 ./dirZ/Properties/AssemblyInfo.cs
88 ./dirZ/fileYZ.cs
25236 total
그 과정의 어딘가에. -print0
옵션을 사용하기 때문에 파일 이름이나 디렉토리 이름에 공백 문자가 없어야합니다. 그리고 가장 큰 소스 트리에서 실행할 때만 발생합니다.
그래서 이것은 wc 나 Cygwin의 버그입니까? 또는 다른 것? 화장실 맨은 말한다 :
인쇄 개행 문자, 단어, 바이트는 각 파일에 대해 을 계산하고 하나 이하의 파일은 전체 라인을 지정합니다.
여기에는 여러 개의 총계 (중간 총계 또는 무언가)에 대한 언급이 없으므로 누가 여기에 책임이 있습니까?
두 가지 : xargs가 일괄 처리되는 이유는 시스템의 제한 사항을 보여주는'xargs --show-limits'에서 볼 수 있습니다. 그리고 파이핑과'--files0-from = -'을 사용하여 파일을 생성하는 것을 피할 수 있습니다. – Xavier
@Xavier : 그 정보로 자신의 답을 추가 할 가치가 있습니다. –