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