我需要获取人类可读的 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
:如果您使用的是不支持的排序
-h
,您可以安装 GNU Coreutils。例如在较旧的 Mac OS X 上:从
sort
手册:-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
我使用了一个非常有用的工具,称为ncdu,它旨在查找那些讨厌的高磁盘使用率文件夹和文件,并删除它们。它是基于控制台的、快速而轻便的,并且在所有主要发行版上都有包。
@Douglas Leeder,还有一个答案:使用另一种工具对 du -h 的人类可读输出进行排序。像 Perl!
分成两行以适合显示。您可以以这种方式使用它,也可以将其设为单线,无论哪种方式都可以。
输出:
编辑:在PerlMonks打了几轮高尔夫球后,最终结果如下:
据我所知,您有三个选择:
du
排序。sort
以支持数字排序的人体尺寸。您也可以
du -k
使用 KiB 中的大小。对于选项 3,您可以使用以下脚本:
我也遇到过这个问题,我目前正在使用一种解决方法:
这不会产生缩放值,但总是产生以兆字节为单位的大小。这还不够完美,但对我来说总比没有好(或以字节为单位显示大小)。
在别处找到这个帖子。因此,这个 shell 脚本会做你想做
du
的事,而不需要调用两次。它用于awk
将原始字节转换为人类可读的格式。当然,格式略有不同(所有内容都打印到小数点后一位)。在我的
.vim
目录中运行它会产生:(我希望 3.6M 的配色方案不会过多。)
这是一个以更紧凑的汇总形式显示目录的示例。它处理目录/文件名中的空格。
此版本用于
awk
为排序键创建额外的列。它只调用du
一次。输出应该看起来完全像du
.我把它分成了多行,但它可以重新组合成一行。
解释:
在没有命令的情况下尝试它
cut
,看看它在做什么。这是一个在 AWK 脚本中进行排序的版本,不需要
cut
: