如何按照人类可读的大小进行数字排序?

如何按照人类可读的大小进行数字排序?

例如我有一个命令可以显示文件夹占用了多少空间

du folder | sort -n

它工作得很好,但我希望有人类可读的形式

du -h folder

但是如果我这样做的话我就无法将其按数字排序。

如何加入du folderdu -h folder查看按排序的输出du folder,但第一列来自du -h folder

PS这只是一个例子。这种技术可能对我非常有用(如果可能的话)

答案1

尝试以下方法:

du -h folder | sort -h

替代方案:-n用于数字排序

注意:-h排序选项仅存在于较新版本的 Ubuntu 中。

答案2

这是一个更通用的方法。在两个不同的文件中获取du folder和的输出。du -h folder

du folder > file1
du -h folder > file2

关键部分是:用合适的分隔符逐行连接file1file2

paste -d '#' file1 file2 > file3

(假设#不出现在file1和中file2

现在对 进行排序file3。请注意,这将根据file1内容进行排序,并按内容打破平局file2。使用 提取相关结果cut

sort -n -k1,7 file3 | cut -d '#' -f 2

还请查看man sort其他选项。


您也可以将其保存为别名,以便以后重复使用。为此,请将以下内容添加到 底部~/.bashrc

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

然后,打开一个新的终端会话并执行您的新别名:

sorted-du /home

答案3

此答案适用于10.04.4LTS以及较低版本的 Ubuntu。

不幸的是,对 KMG 进行分类的准确答案既困难又复杂:

您可以使用以下方式将整个 du 命令设置为可读的命令

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

我在这里找到的

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

只是光盘进入你想知道的文件夹杜夫

你可以将这个 duf 别名添加到 /home/user/.profile 的末尾,以使 duf 命令成为半永久性的

结果:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

这就是为什么du -sch /var/* | sort -n不起作用看到 MKKMMKKMMK 的排序

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

答案4

对于较新版本的 Ubuntu,请使用du -h directory | sort -h

我总是使用这种形式来查找失控的文件。

相关内容