평균 파일 크기 계산

평균 파일 크기 계산

디렉터리의 평균 파일 크기를 계산하는 편리한 한 줄 코드를 찾고 있습니다.

내가 원하는 것은:

모든 파일의 크기/디렉터리의 파일 수

답변1

GNU를 사용하여 다음을 찾으세요.

find . -type f -printf '%s\n' | awk '{s+=$0}
  END {printf "Count: %u\nAverage size: %.2f\n", NR, s/NR}'

또는 디스크 사용량의 경우:

find . -type f -printf '%b\n' | awk '{s+=$0}
  END {printf "Count: %u\nAverage size: %.2f\n", NR, s*512/NR}'

동일한 파일에 대한 하드 링크가 여러 개 있는 경우 디스크 사용량이 여러 번 계산됩니다.

위의 내용은 기호 링크나 디렉터리 또는 기타 특수 파일이 아닌 일반 파일만 계산합니다. 숨겨진 파일이 포함되어 있습니다.

내장 기능과 동일 zsh:

zmodload -i zsh/stat
count() {zstat -Hs -- $REPLY; ((size+=$s[size], count++, 0))}
size=0 count=0
**/*(oNDN.+count)
print -f "Count: %s\nAverage size: %.2f\n" $count $(($size./count))

답변2

FreeBSD/Mac OS X의 경우 find( stat비록 awk편리한 단일 라이너는 아니지만):

find -x . -type f -maxdepth 1 -exec sh -c 'stat -f '%z' "${@}"' _ '{}' + | 
LC_ALL=C awk -v pwd="${PWD}" '
   BEGIN{ sum=0; count=0; }
   { sum+=$1; ++count; }
   END{ 
        if (count == 0) exit;
        printf ("number of files: %d\n", count); 
        printf ("average file size in B: %.5f\n", sum/count); 
        printf ("average file size in KB: %.5f\n", (sum/count) / 1024); 
        printf ("average file size in MB: %.5f\n", (sum/count) / (1024*1024)); 
        printf ("directory: %s\n", pwd); 
   }
'

답변3

한 줄의 간단한 솔루션:

ls -Rl -- "$DIR" | awk 'BEGIN{sum=0;count=0};/^-/{sum+=$5;++count};END{print sum/count}'

ls여기 에는 일반 파일의 데이터를 구성해야 하는 "-"로 시작하는 출력 행만 고려하는 구문 트릭이 있습니다 .

답변4

하위 디렉터리는 무시하고 디렉터리의 파일에 대해서만 작동합니다.

expr $(du -Ss | cut -f1) / $(find /path/to/dir -maxdepth 1 -type f | wc -l)

또는 하위 디렉터리에 있는 파일을 포함하여 모든 파일의 개수를 계산합니다.

expr $(du -s | cut -f1) / $(find /path/to/dir -type f | wc -l)

관련 정보