linux中按文件大小排序查找

我需要得到一个可读的du输出列表。

但是,du没有“按大小排序”选项,并且管道对于sort人类可读标志不起作用。

例如,运行:

du | sort -n -r 

按大小(降序)输出排序后的磁盘使用情况:

du |sort -n -r
65108   .
61508   ./dir3
2056    ./dir4
1032    ./dir1
508     ./dir2

但是,使用人类可读的标志运行它,不能正确排序:

du -h | sort -n -r

508K    ./dir2
64M     .
61M     ./dir3
2.1M    ./dir4
1.1M    ./dir1

有谁知道一种du -h 按大小排序的方法?

答案

从2009年8月发布的GNU coreutils 7.5开始,sort允许一个-h参数,它允许通过du -h以下方式生成的数字后缀:

du -hs * | sort -h

如果您使用的是不支持的排序,则-h可以安装GNU Coreutils。例如,在较旧的Mac OS X上:

brew install coreutils
du -hs * | gsort -h

sort手册:

-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)


du | sort -nr | cut -f2- | xargs du -hs
评论:它会做大量的重复计数。

@Douglas Leeder,还有一个答案:使用另一个工具对du -h的可读输出进行排序。像Perl一样!

du -h | perl -e 'sub h{%h=(K=>10,M=>20,G=>30);($n,$u)=shift=~/([0-9.]+)(\D)/;
return $n*2**$h{$u}}print sort{h($b)<=>h($a)}<>;'

分成两行以适应显示。你可以这样使用它,或者把它作为一个单行,它将以任何方式工作。

输出:

4.5M    .
3.7M    ./colors
372K    ./plugin
128K    ./autoload
100K    ./doc
100K    ./syntax
Tags:, , ,

添加评论

友情链接:蝴蝶教程