Linux 中按大小排序的通用工具,了解常见单位后缀

Linux 中按大小排序的通用工具,了解常见单位后缀

我可以按大小排序文件/目录列表:

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 有一个oLglob 限定符(请注意,它是按大小排序,而不是按磁盘使用情况排序)。

ls -S可以完成(使用 GNUls进行-U未排序):

ls -ldU -- *(oL)

对于符号链接解析后按大小排序:

ls -LldU -- *(-oL)
wc -c -- *(-oL)

答案2

lssort理解的 GNU 变体-h(助记符:-human)。您可以使用ls -lSh,ls -sShdu -h … | sort -h:

du --max-depth=1 -h . | sort -h

请记住,这ls不会报告目录内容的大小。

相关内容