【问题标题】:Average and maximum size of directories目录的平均大小和最大大小
【发布时间】:2011-01-26 01:20:27
【问题描述】:

我有一个目录和一堆这样的子目录: - directory1 (sub-dir1, sub-dir2, sub-dir3, sub-dir4,sub-dir5...........等等,数百个......)

如何找出子目录的平均大小? 以及如何找到子目录的最大大小?

全部使用 Unix 命令...

谢谢。

【问题讨论】:

  • 子目录的最大大小是什么意思?你的意思是最大的子目录的大小?
  • 使用 Unix 命令意味着这与编程无关。投票迁移到超级用户。
  • 迁移到超级用户没问题。

标签: unix shell directory size


【解决方案1】:

我曾经遇到过 ext3 的问题,它每个目录只允许 31998 个子目录。 Ext4 允许 ~64k。

【讨论】:

  • 我一个目录下的子目录不超过1000个,所以这不是问题。
【解决方案2】:

如果您在directory1 中只有目录而没有文件,那么以下两个“命令”应该分别为您提供最大目录的大小(以字节为单位)和名称以及它们的平均大小(以字节为单位) .

$ du -sb directory1/* | sort -n | tail -n 1
$ du -sb directory1/* | awk ' { sum+=$1; ++n } END { print sum/n } '

如果directory1内也有普通文件,这些也会和上面的例子一样。如果不计算普通文件,以下可能更合适。

$ find directory1/ -mindepth 1 -maxdepth 1 -type d -exec du -sb {} \; | sort -n | tail -n 1
$ find directory1/ -mindepth 1 -maxdepth 1 -type d -exec du -sb {} \; | awk ' { sum+=$1; ++n } END { print sum/n } '

【讨论】:

  • 第二个命令是否给出了以 KB 为单位的平均大小? (我理解的第一个是字节给我的,对吧)
  • @Mircea 所有大小都以字节为单位,这就是 -bdu 的标志所做的。如果您想要 KiB 中的大小,请将 -b 替换为 -k
  • 好吧,对于第一个命令(与 -b 一起使用),我得到的最大大小为 9893072,我猜它是 9893 KiloBytes - 不是 KiloBits,对吧?)。如果我用 -k 运行它,我得到 992(KiloBytes 还是 KiloBits?)哪一个是正确的?当我使用 -b 运行第二个命令时,它给了我 960(平均值)。 960字节??这是不可能的,我知道里面的所有子目录都超过 960 字节。
  • 我怎样才能消除某些子目录的计数?
  • @Mircea 我犯了一个小错误。 sort 应该添加 -n (正如我现在在上面的答案中所做的那样)以使其按数字而不是按字典顺序排序。另外,请注意-k 以 KiB 为单位给出大小,而不是 kB。 1 KiB 是 1024 字节,1 kB 是 1000 字节。
【解决方案3】:

要获得最大大小 (KB),请使用 -b 表示字节

du -sk */|sort -n|tail -1

获取平均大小 (KB)

du -sk */|awk '{s+=$1}END{print s/NR}'

【讨论】:

  • 难道 awk 不会破坏只使用 unix 命令的目的吗?我的意思是,肯定是一个,但是 perl 也是一个
  • 我不明白你在说什么。任何可以在命令行上执行的工具/程序在技术上都是“unix 命令”。然而,在传统意义上,在 Perl/Python 这样的语言出现之前,这些命令(例如 du/awk 等)已经是 unix 的一部分。直到今天,我仍然将它们区分为 unix 命令(如 Single unix 规范中的那些),而不是将 Perl/Python 称为“unix 命令”
  • 但是 awk 是一种编程语言。图灵完成了。
  • 是的,所以?我还是不明白你的意思。 awk 是一种编程语言,但它没有库/模块来查找磁盘使用情况(又名 du)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多