나열된 파일의 크기를 요약하는 방법이 있습니까?

나열된 파일의 크기를 요약하는 방법이 있습니까?

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

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스크립트는 작동하지 않습니다.

제가 틀렸거나 해결 방법이 있으면 제게 제안하거나 정정해 주세요.

답변1

'먼저, 기울어진 작은따옴표( ) 대신 곧은 작은따옴표( ) 를 사용해야 합니다 `.

인라인 스크립트는 awk다음과 같습니다.

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

따라서 초기화 total( awk0으로 초기화), 루프가 없으며 awk각 입력 줄에서 스크립트가 이미 실행됩니다.

답변2

@enzotib은 이미 구문 오류가 무엇인지 지적했습니다. 저는 접선을 시작하겠습니다.

숫자 목록을 합산하는 것은 계속해서 나오는 것 중 하나입니다. 나는 이 쉘 함수로 끝났습니다.

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

이렇게 하면 솔루션이 다음과 같이 됩니다.

ls -lrt | sumcol 5

그러면 5열의 숫자를 합산하여 값이 인쇄됩니다.

답변3

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

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

답변4

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

관련 정보