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

4

我正在处理一个具体项目,需要确定大量文档的组成,以便我们有一个性能测试的基准。

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

我已经查看了一些解决方案,例如: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,但没有一个完全符合我的需求。


那么你的意思是没有任何东西可以 _完全符合你的要求_,需要有人为你设计出一些东西? - devnull
你的系统支持这个命令 stat --format="%s" FILE 吗?它可以直接给出文件大小。 - BMW
@devnull 好的,也许我表达得不太好。我不知道如何到达我需要去的地方。欢迎提供指针。 - Mardoz
文件类型是什么意思,扩展名可以吗? - anubhava
@anubhava 扩展也可以。 - Mardoz
3个回答

9
这个du和awk的组合应该适用于您:

这个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])}' 

谢谢,运行得非常好!不过有一个小改变,我已经将 "-a" 开关更改为 "-ak",因为 "du" 命令的默认块大小很奇怪。 - Mardoz

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

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


在OSX上,这会出现stat: illegal option -- -的错误。虽然我希望有一种更简洁的方法来分组查找结果,但我将继续编写一个shell脚本。感谢您的指引。 - Mardoz
1
你可以使用这个Perl的一行命令来获取OSX上文件大小,代替stat函数... perl -e 'print -s $ARGV[0],"\n"' somefile - Mark Setchell
谢谢,我已经将你的建议添加到我的脚本中了。 - BMW
看起来OSX确实有一个内置的stat,但它的工作方式很奇怪。以下命令以字节为单位给出文件“fred”的大小:stat -f“%Dz”fred - Mark Setchell

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”进行更改。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接