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

UAd*_*ter 22 bash sort

例如我有命令显示文件夹需要多少空间

du folder | sort -n
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是我想要人类可读的形式

du -h folder
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,则无法将其排序为数字。

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

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

All*_*lu2 41

尝试类似:

du -h folder | sort -h
Run Code Online (Sandbox Code Playgroud)

备择方案: -n用于数字排序

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

  • 有 8.17 版,所以我想这是最简单的方法 (3认同)

Pra*_*eek 13

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

du folder > file1
du -h folder > file2
Run Code Online (Sandbox Code Playgroud)

关键部分是:使用合适的分隔符逐行连接file1和连接file2

paste -d '#' file1 file2 > file3
Run Code Online (Sandbox Code Playgroud)

(假设#没有出现在file1和 中file2

现在排序file3。请注意,这将根据file1内容进行排序并按内容打破联系file2。使用cut以下方法提取相关结果:

sort -n -k1,7 file3 | cut -d '#' -f 2
Run Code Online (Sandbox Code Playgroud)

另请查看man sort其他选项。


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

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

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

sorted-du /home
Run Code Online (Sandbox Code Playgroud)