打印最大文件的大小和平均文件大小

时间:2016-03-28 17:35:15

标签: linux bash shell

嘿,所以我是以

格式打印最大文件大小的最便捷方式

(此输出中的值仅作为示例

  

文件大小最大:2015年   平均文件大小:1132

所以要获得最大的文件大小,我可能会使用命令

find . -type f -ls | sort -r -n -k7 | head -n 1

这将打印多个属性的冗长列表并打印其中最大的属性(基于文件大小)

问题是,我无法真正找到获得实际文件大小的方法

以类似的方式,我想要的是获得平均文件大小。

所以我需要找到一种方法,将所有文件的文件大小相加,然后将其除以文件数

要获得数字很简单,只需简单(找到.- type f | wc -l) 更大的问题是关于摘要。

理想情况下,我希望解决方案采用简单的格式

例如。 echo "Largest file size: $(find . -type f | command | command)"

谢谢。

2 个答案:

答案 0 :(得分:0)

最大的文件

find . -type f -printf "%s\t%p\n" | sort -nr | head -1 | cut -f1

平均文件大小

find . -type f -printf "%s\t%p\n" | awk '{sum+=$1; c++} END{print sum/c}'

当然,当你有awk时,不需要做两次

$ find . -type f -printf "%s\t%p\n" | 
  awk 'max<$1{max=$1}
             {sum+=$1; c++}
          END{print "largest: "max; print "average: " sum/c}'

largest: 74
average: 19

当然,如果您不打算使用文件名,则可以更改为printf "%s"

答案 1 :(得分:0)

您可以使用 cut 命令打印由某个分隔符分隔的一行的一部分

对于最大的文件大小,您可以使用:

 echo "Largest file size: $(find . -type f -ls | sort -r -n -k7 | head -n 1 | cut -d' ' -f2)"

对于平均尺寸,多种选择是可行的。你可以使用awk:

 echo "Average file size: $(find . -type f -ls | sort -r -n -k7  | cut -d' ' -f2 | awk '{ total += $1; count++ } END { print total /count}')"