按人类可读的文件大小排序

按人类可读的文件大小排序

如何使用人性化的文件大小排序、考虑大小标识符 (G、M、K) 的数字排序对列表进行排序?du -sh例如,我可以对“ ”输出进行排序吗?

问题:考虑列出文件/文件夹并按其大小排序的问题。您可以通过运行以下命令来实现:

du -s * | sort -n

这将按大小排序列出文件/文件夹。但是,打印的大小值以字节为单位(或者,如果您愿意,也可以是兆字节或千兆字节)。

希望能够根据人类可读的值进行排序,因此我可以运行类似于

du -sh * | <human-readable file sort>

并且在 2.0M 之后出现 1.5GB 的文件夹。

答案1

据我所知,没有标准命令可以执行此操作。

有多种解决方法,在 Stack Overflow 上询问同一问题时进行了讨论:如何按大小对 du -h 输出进行排序

答案2

使用 GNU coreutils >= 7.5:

du-hs * |排序-h

(摘自serverfault 问题

手册页

du --version编辑:如果您使用的是 GNU 版本,则可以使用和检查版本sort --version。如果您使用的是 homebrew,则可能需要使用gdugsort

答案3

如果您只是担心大于 1MB 的文件(看起来确实如此),您可以使用此命令对它们进行排序,并使用 awk 将大小转换为 MB:

du -s * | sort -n | awk '{print int($1 / 1024)"M\t"$2}'

再次,这会将大小四舍五入为最接近的 MB。您可以修改它并将其转换为您选择的单位。

答案4

这个程序可以处理带有空格或撇号的文件名,并且可以在不支持xargs -d或的系统上运行sort -h

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

结果是:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

相关内容