5
24
2010
8

将du的输出按文件大小排序

本文来自依云's Blog,转载请注明。

du命令的输出结果要么是不人性化的全部以千字节为单位,要么加上-h参数,显示为1K 234M 2G这样易读的数据。可是,我通常想查看那些大文件/目录,或者那些小文件/目录。单单只用sort命令的话,就不得不在脑海转换那些千字节单位的数据了。做为一个Linux用户,电脑能做的我可不想让人脑来做。Google了一下,发现这个帖子提供了一段代码可行,但是输出效果并不理想,于是我略作更改,写出了以下代码:

sdu () {
  du -sk $@ | sort -n | awk '
BEGIN {
  split("K,M,G,T", Units, ",");
  FS="\t";
  OFS="\t";
}
{
  u = 1;
  while ($1 >= 1024) {
    $1 = $1 / 1024;
    u += 1
  }
  $1 = sprintf("%.1f%s", $1, Units[u]);
  sub(/\.0/, "", $1);
  print $0;
}'
}

这段代码使用sort排序原始数据后,再使用awk来转换数字的单位。使用方法为sdu后加要查看大小的文件/目录就可以了。注意我在代码中加了-s参数,如果希望同时查询子目录的话,需要去掉这个参数。

Category: shell | Tags: shell linux | Read Count: 26600
hex108 说:
Oct 11, 2010 07:42:07 PM

du -s * | sort -k 1 -g | awk '{print $2}' | xargs du -sh {}

Avatar_small
依云 说:
Oct 11, 2010 08:26:49 PM

呵呵,我见过这个方法。但我不想du两次。虽说有缓存,但总觉得磁盘还是会比较难受。

hex108 说:
Oct 11, 2010 09:58:52 PM

呵呵,考虑得挺仔细的,你的博客不错~~

shellexy 说:
Sep 08, 2011 01:08:33 AM

乃们肯去辛苦看 script 却不肯看看 sort 的参数么,

sort --help 可是有
-h, --human-numeric-sort 使用易读性数字(例如: 2K 1G)
参数的,

于是可以直接 du -h | sort -h

bingo 说:
Apr 01, 2013 07:31:14 PM

sort -h 这个。。。。。。比如sort 5.97 不支持-h 参数。
所以。。。还是仙子的方法比较通用

Avatar_small
依云 说:
Apr 01, 2013 09:08:11 PM

好老的 sort = =

不过,OpenBSD 的 sort 也是不支持的。我在 FreeBSD 上找到个 5.3.0-20040812-FreeBSD 版本的……


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com