计算平均文件大小

taf*_*fer 11 command-line bash

我正在寻找一种方便的单行程序来计算目录中的平均文件大小。

我想要的是:

所有文件的大小/目录中的文件数

Sté*_*las 12

使用 GNU 查找:

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

或用于磁盘使用:

find . -type f -printf '%k\n' | awk '{s+=$0}
  END {printf "Count: %u\nAverage size: %.2f\n", NR, s*1024/NR}'
Run Code Online (Sandbox Code Playgroud)

请注意,如果同一文件中有多个硬链接,则会多次计算其磁盘使用情况。

以上只计算常规文件,不计算符号链接或目录或其他特殊文件。它包括隐藏文件。

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))
Run Code Online (Sandbox Code Playgroud)


小智 4

对于 FreeBSD / Mac OS X findstat并且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); 
   }
'
Run Code Online (Sandbox Code Playgroud)