Answers:
Afaik,没有标准命令可以执行此操作。
有多种解决方法,当在Stack Overflow询问相同问题时进行了讨论:如何按大小对du -h输出进行排序
使用GNU coreutils> = 7.5:
du -hs * | 排序-h
(来自此serverfault问题)
编辑:您可以使用du --version
以及sort --version
是否使用GNU版本来检查您的版本。如果您使用自制软件,则可能需要使用gdu
和gsort
。
du -hs *
在Mac OS X上可以正常使用,但是会sort -h
返回sort: invalid option -- h
。你也可以通过MacPorts的描述安装coreutils软件包这里。
如果您只是担心大于1MB的文件(看起来确实如此),可以使用以下命令对它们进行排序,然后使用awk将大小转换为MB:
du -s * | sort -n | awk '{print int($1 / 1024)"M\t"$2}'
同样,这会将大小四舍五入到最接近的MB。您可以将其修改为您选择的单位。
du -sm * | sort -n
。 -s
/ -g
使du
输出大小以兆字节/千兆字节为单位。
int($1 / (1024 * 1024))
du -sk * | 排序-n | awk'{print $ 2}'| 同时读f; 做du -sh“ $ f”; 完成
我到这里结束了,因为我试图对将MB和GB合并为同一输出的其他内容进行排序,但我无法控制它。
$NF
使用,因为#GB
or #MB
模式是输出中的最后一列:
somecommand | \
gawk '{
if ($NF ~ /[0-9\.]+GB/)
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
printf "%sMB\n", a*1024} \
else {print $NF}
}' | \
sort -n
awk命令的说明:
if ($NF ~ /[0-9\.]+GB/)
如果最后一列与包含数字或.
一个或多个后跟正则表达式的模式匹配GB
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
然后将变量设置a
为与最后一列($NF
)中的相同正则表达式模式匹配的每一行的数字部分
printf "%sMB\n", a*1024} \
设置后a
,用于printf
将输出格式化为${a*1024}MB
else {print $NF}
否则只打印最后一列
sort -n
在输出上使用数字排序
例
echo "4MB\n5GB\n420MB\n420GB\n1024MB\n1GB" | \ 23:43:06 (EMP-2653/package-upgrades) Ø M
gawk '{
if ($NF ~ /[0-9\.]+GB/)
{ a=gensub(/([0-9\.]+)(GB)/,"\\1","g",$NF); \
printf "%sMB\n", a*1024} \
else {print $NF}
}' | \
sort -n
我敢肯定有一种方法可以重用正则表达式模式,所以我只执行一次匹配并就地替换,但是我还不知道该怎么做:)
brew install coreutils
(在所有coreutils命令前添加“ g”)。然后可以做gdu -hs * | gsort -h
。