计算平均文件大小


11

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

我想要的是:

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


如目录中每个文件的平均大小?或目录的大小?
Drake Clarris

目录中文件的平均大小
taffer

Answers:


3

在FreeBSD / Mac OS X中findstatawk(不完全是一个得心应手的一行虽然):

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=valueawk将扩大ANSI C序列\n\r...虽然贝壳做外销PWD,所以你可以用ENVIRON["PWD"]awk不具备那样的问题具有在他们的名字反斜杠目录。
斯特凡Chazelas

如果您只需要平均大小(以字节为单位),则可以使用find . -type f -exec stat -f%z {} +|awk '{s+=$0}END{print s/NR}'
Lri 2014年

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)

我不想忽略子目录。
taffer

很好 只需在du调用中添加-k即可得到1024字节(kb)的结果,而不是512字节(文件块的默认大小)。
Olivier Dulac

2
du -s将累加所有文件和目录以及其他非常规文件磁盘使用量(而不是大小),但不包括指向同一文件的额外硬链接,而将计算所有常规文件。此外,带有换行符的文件名将被计数多次。是GNU特定的。将报告扇区或千字节,具体取决于操作系统。finddu -Sdu -s
斯特凡Chazelas

像往常一样,@ StephaneChazelas对Linux / unix的了解使我惊讶,并向我展示了我快速又肮脏的解决方案有多肮脏。您使用linux / unix已有多长时间了?
德雷克·克拉里斯

答案非常错误,应删除。Stephane解释。
Acumenus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.