我可以按大小排序文件/目录列表:
ls -lS
du
但如果我以人类可读的格式使用:
du --max-depth=1 -h .
我得到:
128K ./something
3,3M ./more
3,2M ./even-more
...
哪个没有订购。是否有任何标准工具可以订购此类数据?标准sort
似乎不支持这一点。我需要自己动手吗?
答案1
GNUsort
有一个-h
/--human-numeric-sort
选项和h
排序键标志来处理这些(它期望基于 1024 个单位(1K 之前有 1023 个排序),这恰好du
也是 GNU 的计数方式。
现在请注意,使用 时会丢失一些精度du -h
,因此顺序可能最终错误:
$ du -k a b
1212 a
1208 b
$ du -h a b | sort -h
1.2M a
1.2M b
正如@StephenKitt提到的,您可以通过告诉du
您提供完整的精度并仅转换为来解决它人类使用例如 GNU 排序后的格式numfmt
:
$ du --block-size=1 a b | sort -n | numfmt --to=iec
1.2M b
1.2M a
(请注意间距会受到影响)。上述所有内容均假设文件名不包含换行符。
至于按大小排序的一般问题,zsh
glob 有一个oL
glob 限定符(请注意,它是按大小排序,而不是按磁盘使用情况排序)。
ls -S
可以完成(使用 GNUls
进行-U
未排序):
ls -ldU -- *(oL)
对于符号链接解析后按大小排序:
ls -LldU -- *(-oL)
wc -c -- *(-oL)
答案2
ls
和sort
理解的 GNU 变体-h
(助记符:-h
uman)。您可以使用ls -lSh
,ls -sSh
或du -h … | sort -h
:
du --max-depth=1 -h . | sort -h
请记住,这ls
不会报告目录内容的大小。