问题描述
例如我有命令显示文件夹占用了多少空间
du folder | sort -n
它效果很好,但是我想要人类可读的形式
du -h folder
但是,如果我这样做,我就无法将其排序为数字。
如何连接 du folder
和 du -h folder
以查看按 du folder
排序的输出,但第一列来自 du -h folder
附:这只是一个例子。这项技术可能对我非常有用(如果可能的话)
最佳回答
尝试类似的方法:
du -h folder | sort -h
替代方案:-n
用于数字排序
注意:sort的-h
选项仅存在于较新版本的Ubuntu中。
次佳回答
这是一个更通用的方法。在两个不同的文件中获取 du folder
和 du -h folder
的输出。
du folder > file1
du -h folder > file2
关键部分是这样的:使用合适的分隔符逐行连接 file1
和 file2
。
paste -d '#' file1 file2 > file3
(假设 #
没有出现在 file1
和 file2
中)
现在对 file3
进行排序。请注意,这将根据 file1
内容进行排序,并根据 file2
内容断开联系。使用 cut
提取相关结果:
sort -n -k1,7 file3 | cut -d '#' -f 2
另请参阅 man sort
了解其他选项。
您也可以将其另存为别名,供以后使用 re-use。为此,请将以下内容添加到 ~/.bashrc
的底部:
sorted-du () {
paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}
然后,打开一个新的终端会话并执行您的新别名:
sorted-du /home
第三种回答
此答案适用于 10.04.4LTS 及更低版本的 Ubuntu。
不幸的是,对 K M G 进行排序的准确答案既困难又复杂:
您可以使用此命令将整个 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
您可以将此 duf 别名添加到 /home/user/.profile\n 的末尾,以使 duf 命令 semi-permenant
结果:
\\n
user@hostname:~$ duf\\n0.0K Documenten\\n0.0K Muziek\\n0.0K Openbaar\\n0.0K Sjablonen\\n0.0K Video's\\n4.0K backup_db.sql.g\\n4.0K examples.desktop\\n12.0K xml printer ticket\\n52.0K hardinfo_report.html\\n152.0K librxtxSerial.so\\n2.7M jpos\\n4.4M nxclient_3.5.0-7_amd64.deb\\n6.4M nxnode_3.5.0-4_amd64.deb\\n6.8M Downloads\\n7.4M nxserver_3.5.0-5_amd64.deb\\n12.4M NetBeansProjects\\n18.1M mysqlworkbench.deb\\n28.3M Afbeeldingen\\n45.8M ergens-20110928-18.sql.gz\\n60.5M 2012-06-02ergens_archive.tar.gz\\n65.5M 2012-08-26ergens_archive.tar.gz\\n65.6M 2012-08-28ergens_archive.tar.gz\\n65.6M 2012-08-29ergens_archive.tar.gz\\n65.7M 2012-08-30ergens_archive.tar.gz\\n113.0M Bureaublad\\n306.2M ergens-20110928-18.sql\\n
\\n
这就是 du -sch /var/* | sort -n
不起作用的原因,请参阅 MKKMMKKMMK 的排序
\\n
user@hostname:~$ du -sch /var/* |sort -n\\n\\n0 /var/crash\\n0 /var/local\\n0 /var/lock\\n0 /var/opt\\n8,0M /var/backups\\n12K /var/games\\n16K /var/tmp\\n17M /var/log\\n68M /var/cache\\n104K /var/spool\\n144K /var/run\\n351M /var/lib\\n443M totaal\\n704K /var/mail\\n
\\n
第四种回答
命令 GNU sort
有以下选项:
\\n
-h
,--human-numeric-sort
compare human readable numbers (e.g., 2K 1G).\\n
To have this option on BSD/OSX, you can install
sort
fromcoreutils
(viabrew
) and add the bin folder to yourPATH
into your rc files.\\n
所以命令看起来像:
du -ah . | sort -rh | head -20