나열된 파일 크기를 합산하는 방법이 있습니까?

이것은 일부 파일을 나열하는 데 사용하는 명령입니다.

find . -name \*.extract.sys -size +1000000c -exec ls -lrt {} \;
-rw-r--r--   1 qa1wrk15   test       1265190 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_7.20110929.extract.sys
-rw-r--r--   1 qa1wrk15   test       1345554 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_2.20110929.extract.sys
-rw-r--r--   1 qa1wrk15   test       1370532 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_3.20110929.extract.sys
-rw-r--r--   1 qa1wrk15   test       1399854 Sep 29 01:14 ./var/can/projs/ar/rep/extract/Sep/29/ar.ARAB-PI_8.20110929.extract.sys

등등.

이제 다섯 번째 열을 요약하여 이러한 파일의 총 크기를 계산하려고합니다. 나는 awk이것을 사용하여 특정 디렉토리에서 다음을 테스트했다.

>ls -lrt | awk `{ print $1 }`
ksh: syntax error at line 1 : `{' unmatched

문제가 무엇인지 이해하지 못하는 이유는 무엇입니까?이 구문 오류가 발생했습니다 .

시도하려고합니다

ls -lrt | awk `BEGIN {total = 0} {for(i=0;i<NR;i++){total+=$5}} END {printf "%d",total} 

이것은 또한 간단한 awk스크립트가 작동하지 않습니다.

내가 틀렸거나 해결 방법이 있으면 알려주십시오.



답변

우선 ', 기울어 진 따옴표 ( )가 아닌 직선 따옴표 ( ) 를 사용해야합니다 `.

awk인라인 스크립트는 다음과 같이 될 수있다 :

ls -lrt | awk '{ total += $5 }; END { print total }'

따라서 초기화 할 필요가 없으며 total( awk0으로 초기화) 루프 할 필요가 없으며 awk모든 입력 줄에서 이미 스크립트를 실행합니다.


답변

@enzotib는 이미 구문 오류가 무엇인지 지적했습니다. 조금 접하게됩니다.

숫자 열을 합산하는 것이 계속 나타나는 것 중 하나입니다. 이 셸 함수로 끝났습니다.

sumcol()
{
    awk "{sum+=\$$1} END {print sum}"
}

이를 통해 솔루션은 다음과 같습니다.

ls -lrt | sumcol 5

열 5의 숫자를 합산하고 값을 인쇄합니다.


답변

다음을 사용하여이를 수행하는 다른 방법이 있습니다 du.

find . -name \*.extract.sys -size +1000000c -print0 | du -c --files0-from=- | awk 'END{print $1}'


답변

HP-UX find-printf옵션이있는 경우 다음 bc과 같은 계산 공식을 작성하는 데 유용합니다 .

( find . -name \*.extract.sys -size +1000000c -printf '%s+'; echo 0 ) | bc

수식이 너무 커지면 단계별로 계산할 수 있습니다.

( find . -name \*.extract.sys -size +1000000c -printf 's+=%s\n'; echo s ) | bc


답변

GNU로 find:

find -name '*.extract.sys' -size +1000000c -printf '%s\n' | jq -s add

GNU로 stat:

find . -name '*.extract.sys' -size +1000000c -exec stat -c%s '{}' + | jq -s add

BSD로 stat:

find . -name '*.extract.sys' -size +1000000c -exec stat -f%z '{}' + | jq -s add


답변