여기 당신이 원하는 것을 달성의 또 다른 방법 :
stat * 2&>/dev/null | awk '/Size/ && !/directory/ { sum += $2 } END { print (sum ? sum : 0) }'
이 stat
의 출력을 구문 분석 AWK를 사용합니다. 쉘은 *
을 현재 디렉토리의 모든 이름으로 확장합니다. 디렉토리가 비어 있으면 stat
이 오류를 생성하고 /dev/null
으로 전송됩니다.
awk 스크립트는 "크기"는 포함하지만 "디렉토리"는 포함하지 않는 행에 대해 두 번째 열의 값을 추가하므로 파일과 심볼 링크가 포함됩니다. 파일 수만 계산하려는 경우 !/directory/
을 /regular file/
으로 변경할 수 있습니다.
이항 연산자 ? :
은 sum
이 "참"이면 sum
을, 그렇지 않으면 0
을 인쇄합니다. 디렉토리가 비어 있으면 sum
이 정의되지 않으므로 0
이 인쇄됩니다. 주석에서 설명한 바와 같이
는 다수 sum
강요보다 간결한 방법으로 단항 연산자 +
print +sum
를 사용 print sum+0
또는 대안을 사용하는 것이다. 이 경우, 어느 쪽이든 사용하기에 완벽하게 괜찮습니다. 더 복잡한 시나리오에서는 +sum
을 권장합니다.
고맙습니다. "sum = 0"섹션 주위에 둥근 괄호가 있어야한다고 생각합니다. 내 버전이 작동하지 않는 이유를 설명해 주시겠습니까? 고맙습니다. –
예, 고삐가 교정되었습니다. '$ 5 == ""'는'$ 5'가 비어있는 필드 6이 필드 5가되기 때문에 작동하지 않습니다. – anubhava
... 이것은 정확하게'ls'을 파싱해서는 안되는 이유입니다! –