【问题标题】:recursively finding size of binary directories in linux在linux中递归查找二进制目录的大小
【发布时间】:2019-05-03 06:20:29
【问题描述】:

你能推荐一个好的实用程序/BASH 函数来扫描目录并输出它的大小吗?

我需要在二进制目录中找到可执行文件的大小:/usr/bin/bin,以便找到它们的平均值和中值。

我不确定最好使用du 命令还是ls

在 Linux 中查找目录中位数和平均值的最简单有效的方法是什么?

PS:应该是递归的,因为里面有好几个目录。

【问题讨论】:

  • 看看du。命令man du 将为您提供更多信息。您还应该查看awk 来解析du 的输出并计算中值和平均值。这里有很多例子可以进行这种计算。
  • 使用 Windows CMD.exe 不太可能有帮助。

标签: linux bash ls du


【解决方案1】:

这是一个两步过程。首先找出每个文件的磁盘使用情况,然后计算值。

对于第一个du 显然是我最喜欢的。

find /usr/bin -type f -exec du '{}' '+'

这将搜索所有文件 (-type f) 并将其文件名 ('{}') 附加到 (du) 的调用 (-exec) 中。

结果将是一个制表符分隔的使用列表(在 IIRC 块中)和文件名。

现在是第二部分(这里是平均值)。我们将把这个列表输入awk 并让它相加并除以行数

{ sum = $1 } END { print "avg: " sum/NR }

第一个块将每行执行一次,并将第一列(制表符分隔)的值添加到变量sum。另一个块以END 为前缀,这意味着它将在标准输入为EOF 时执行。 NR 是一个特殊的变量,表示行数。

所以完成的命令看起来像:

find /usr/bin -type f -exec du '{}' '+' | awk '{ sum += $1 } END { print "Avg: " sum/NR }'

现在去了解findawk 和shell 管道。当你不得不处理 linux shell 的东西时,这些东西会让你的生活变得更加轻松。此外,有关行缓冲和标准 IO 流的基本知识也很有帮助。

【讨论】:

  • 感谢您的详细回答。如何检查中位数?平均值更容易,因为它将大小除以文件数,但是如何找到中位数?在中间搜索文件并检查它的长度(如果奇数)或尝试找到 3 个“中间”元素并计算 [middle-1] 和 [middle+1] 的平均值似乎效率低下
  • 将 find 的输出通过管道传输到一个文件中,计算行数,然后仅用头尾提取那些重要的行...这比简单的管道要复杂一些,但可以在一对夫妇中实现行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 2015-06-05
  • 2017-01-11
  • 1970-01-01
  • 2011-12-02
相关资源
最近更新 更多