평균 파일 크기 계산


11

디렉토리의 평균 파일 크기를 계산할 수있는 편리한 단일 라이너를 찾고 있습니다.

내가 원하는 것은 :

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


디렉토리에있는 각 파일의 평균 크기와 같이? 또는 디렉토리의 크기?
Drake Clarris

디렉토리에있는 파일의 평균 크기
taffer

답변:


3

FreeBSD의 / 맥 OS X와 find, statawk(정확히 편리한 한 줄하지만)

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); 
   }
'

의 것을 참고 -v var=value, awk같은 ANSI C 시퀀스를 확장합니다 \n, \r... 껍질이 수출을하는 동안 PWD사용할 수 있도록 ENVIRON["PWD"]에서 awk이름에 백 슬래시를 가진 디렉토리에 대한 문제의 종류를하지 않는다.
Stéphane Chazelas

바이트 단위의 평균 크기 만 필요한 경우을 사용할 수 있습니다 find . -type f -exec stat -f%z {} +|awk '{s+=$0}END{print s/NR}'.
Lri

11

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 '%k\n' | awk '{s+=$0}
  END {printf "Count: %u\nAverage size: %.2f\n", NR, s*1024/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))

3

한 줄로 간단한 솔루션 :

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

그것은 ls'-'로 시작하는 출력 라인 만을 고려하여 구문상의 요령을 가지고 있으며 , 이는 정규 파일의 데이터를 구성해야합니다.


2

하위 디렉토리를 무시하고 디렉토리의 파일에 대해서만 :

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)

하위 디렉토리를 무시하고 싶지 않습니다.
태퍼

좋은. du 호출에 -k를 추가하여 512 바이트 대신 1024 바이트 (kb)로 표시하십시오 (파일 청크의 기본 크기).
Olivier Dulac

2
du -s동일한 파일에 대한 추가 하드 링크를 제외하고 모든 파일 과 디렉토리 및 기타 비정규 파일 의 디스크 사용량 (크기 아님)을 합산하고 모든 일반 파일을 계산합니다. 또한 줄 바꿈 문자가있는 파일 이름은 여러 번 계산됩니다. GNU 고유의 것입니다. OS에 따라 섹터 또는 킬로바이트를보고합니다. finddu -Sdu -s
Stéphane Chazelas

평소와 같이 @StephaneChazelas는 Linux / unix에 대한 지식이 놀랍고 빠르고 더러운 솔루션이 얼마나 더러운지를 보여줍니다. 리눅스 / 유닉스를 사용한지 얼마나 되었습니까?
Drake Clarris

대답은 끔찍하게 잘못되어 삭제해야합니다. 스테판이 설명했다.
Acumenus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.