如何按数字排列人类可读的大小?

例如,我有命令显示空间文件夹占用了多少

du folder | sort -n 

它很好用,但我希望有人类可读的forms

 du -h folder 

但是,如果我这样做,我不能将其排序为数字。

如何加入du folderdu -h folder以查看排序为du folder输出,但是使用du -h folder第一列

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

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

 du folder > file1 du -h folder > file2 

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

 paste -d '#' file1 file2 > file3 

(假设#不出现在file1file2

现在排序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 

尝试以下方法:

 du -h folder | sort -h 

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

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

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

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

您可以将整个du命令别名与使用此命令排序人类可读的命令

 alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(KMG)) {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/

只需cd进入你想知道的文件夹然后duf

您可以将此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 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 

命令GNU sort具有以下选项:

-h , – --human-numeric-sort比较人类可读数字(例如,2K 1G)。

要在BSD / OSX上使用此选项,您可以从coreutils (通过brew )安装sort ,并将bin文件夹添加到您的rc文件中。

所以命令看起来像:

 du -ah . | sort -rh | head -20 

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

我一直使用这种forms来查找失控文件。

使用Ctrl + Alt + t打开终端并键入:

  du -sk * | sort -rn 

这个处理带有空格或撇号的文件名,适用于不支持xargs -dsort -h

 du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}" 

这导致:

 368K diskmanagementd 392K racoon 468K coreaudiod 472K securityd 660K sshd 3.6M php-fpm 

我发现在所有系统上工作而不管版本( sort -h对我不起作用)都是

 du -h $(du * | sort -n | awk '{print $2}') 

awk '{print $2}'基本上打印文件名。