用于列出目录中所有文件类型及其平均大小的命令

时间:2014-02-10 11:39:18

标签: macos bash unix

我正在开发一个特定的项目,我需要编制大量文档,以便我们有一个性能测试基准。

具体来说,我需要一个可以递归遍历目录的命令,并且对于每种文件类型,告诉我该类型的文件数量及其平均大小。

我看过像这样的解决方案: Unix find average file sizeHow can I recursively print a list of files with filenames shorter than 25 characters using a one-liner?https://unix.stackexchange.com/questions/63370/compute-average-file-size,但没有什么能让我完全了解我所追求的目标。

3 个答案:

答案 0 :(得分:6)

这个du和awk组合应该适合你:

du -a mydir/ | awk -F'[.[:space:]]' '/\.[a-zA-Z0-9]+$/ { a[$NF]+=$1; b[$NF]++ }
     END{for (i in a) print i, b[i], (a[i]/b[i])}' 

答案 1 :(得分:2)

给你一些东西开始,用下面的脚本,你会得到一个文件列表及其大小,逐行。

#!/usr/bin/env bash

DIR=ABC
cd $DIR

find . -type f |while read line
do 
  # size=$(stat --format="%s" $line)    # For the system with stat command
  size=$(perl -e 'print -s $ARGV[0],"\n"' $line )  # @Mark Setchell provided the command, but I have no osx system to test it. 
  echo $size $line 
done

输出样本

123 ./a.txt
23 ./fds/afdsf.jpg

那么这是你的作业,有了上面的输出,你应该很容易得到文件类型和它们的平均大小

答案 2 :(得分:0)

您可以使用“du”:

du -a -c *.txt

示例输出:

104 M1.txt
8   in.txt
8   keys.txt
8   text.txt
8   wordle.txt
136 total

输出为512字节块,但您可以使用“-k”或“-m”更改它。