我有一个文件夹,里面有很多文件。我想找到这些文件的平均文件大小,因此需要执行类似于 ls somethinghere 这样的命令,以找出符合条件的所有文件的平均文件大小。
要计算Linux系统上目录中文件的平均大小,可以使用以下命令:
ls -l | gawk '{sum += $5; n++;} END {print sum/n;}'
n-1
。 - Asclepiusls
命令? - Cyrus这是Ernstsson答案的简短、通用且适合递归的变体:
find ./ -ls | awk '{sum += $7; n++;} END {print sum/n;}'
find ./ -size -100000c -ls | awk '{sum += $7; n++;} END {print sum/n;}'
mfs
的合适块或片段大小(否则,你可以使用find
的-type f
选项)。因此,这里有一个-size
的例子,仅考虑几个大文件。你对我的评分不公正,并且你抱怨我没有测试过这个程序,这样做很无礼,特别是因为答案没有任何问题。 - cnstwc -c *
命令获取所有文件的大小,使用ls | wc -l
命令获取文件数量,然后将两者相除即可。这个功能具有可移植性,即使在AIX上也可以使用。
输出指定目录(${directory}
在下面的示例中)普通文件的平均字节数:
find "${directory}" '!' -path "${directory}" -prune -type f -ls | awk '{s+=$7} END {printf "%.0f\n", s/NR}'
NR
参数可用于计算行数。
'!'-path ${directory} -prune
是一种通用的方式,通过剪枝掉非起始路径的任何路径来达到等同于GNU find命令中的-maxdepth 1
的效果,从而忽略所有子目录。*.sh
以外的所有文件的平均值,可以添加 '!'-name '*.sh'
。find . '!' -path . -prune -type f '!' -name '*.sh' -ls | awk '{s+=$7} END {printf "%.0f\n", s/NR}'
*.mp3
文件并包括所有子目录(删除'!' -path . -prune
):find . -type f -name '*.mp3' -ls | awk '{s+=$7} END {printf "%.0f\n", s/NR}'
du -sh . # 返回目录使用的总空间
find . -type f | wc -l # 统计文件数量
将第一个除以第二个即可。 如果你想要一行命令,可以这样写:
echo $(( `du -sb | tr '.' ' '` / `find . -type f | wc -l` ))
-
"du" - 查找目录的大小$ du
**$ du /home/david**
**$ du -h**
**$ du -ah**
**$ du -c**
30M 。 30M 总计
第一行将是“du”输出的默认最后一行,指示目录的总大小,另一行显示相同的大小,后跟字符串“总计”。如果您使用grep命令将此命令与其他命令一起使用,则可以仅显示目录的最终总大小,如下所示。
**$ du -ch | grep total**
**$ du -s**
**$ du -S**
**$ du --exculde=mp3**
**$ df -h**
显示与先前命令相同的输出,但“-h”表示以人类可读格式显示。因此,输出将具有“M”表示兆字节和“G”表示千兆字节,而不是以千字节为单位。
大多数用户不使用可以传递给“df”的其他参数。因此,我将不讨论它们。
我将反过来向您展示我在我的计算机上使用的示例。我实际上已将其存储为名为“usage”的脚本,因为我经常使用它。
例如:
我的Linux安装在/dev/hda1上,我也挂载了Windows分区(每次Linux启动时默认)。因此,“df”默认显示我Linux和Windows分区的磁盘使用情况。而我只对Linux分区的磁盘使用情况感兴趣。这就是我使用的内容:
**$ df -h | grep /dev/hda1 | cut -c 41-43**
这个命令会在我的机器上显示以下内容:
45%
基本上,此命令使 'df' 显示所有分区的磁盘使用情况,然后提取带有 /dev/hda1 的行,因为我只对此感兴趣。然后剪切第41到43列中的字符,因为它们是显示使用率的列,这正是我想要的。
还有一些可以与 'du' 和 'df' 一起使用的选项。您可以在 man 手册中找到它们。
除了 @cnst 以外,
如果您需要从计算中排除文件夹,请使用
find ./ -size +4096c -ls | awk '{sum += $7; n++;} END {print sum/n;}'
du
命令来估算给定目录的文件空间使用情况。du -sh /Your/Path # Average file size in human readable format
-s (--summarize)
仅显示每个参数的总计。
-h (--human-readable)
以人类可读的格式打印大小(例如 1K、234M、2G)。
请注意,不使用 -h
将给出默认块大小(512字节块)。
如果您希望指定块大小,可以使用 -k
(千字节)、-m
(兆字节) 或 -g
(千兆字节)。
du -sk /Your/Path # Average file size in Kilobytes.
注:使用文件路径将会给出指定文件的大小。
du -sh
显示的是目录内容的总大小,而不是目录中文件的平均大小。 - Dave
ls
的输出导入到awk
中进行平均):https://dev59.com/ukzSa4cB1Zd3GeqPnHwu - DNA