如何使用人性化的文件大小排序、考虑大小标识符 (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,则可能需要使用gdu
和gsort
。
答案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