我需要得到一个人类可读的du输出列表。
然而,du
没有"按大小排序"选项,而且管道输送到sort
在人类可读的标志下无法工作。
例如,运行。
du | sort -n -r
输出一个按大小排序的磁盘使用情况(降序)。
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
然而,在运行它时,如果使用人类可读的标志,就不能正确排序。
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
有谁知道有什么方法可以按大小对 "du -h "进行排序?
就我所见,你有三个选择。
1.改变du
,在显示前进行排序。
2.2. 改变sort
以支持人类尺寸的数字排序。
3.3. 对排序的输出进行后处理,将基本输出改为人类可读。
你也可以做`du -k',用KiB的大小来生活。
对于选项3,你可以使用以下脚本。
#!/usr/bin/env python
import sys
import re
sizeRe = re.compile(r"^(\d+)(.*)$")
for line in sys.stdin.readlines():
mo = sizeRe.match(line)
if mo:
size = int(mo.group(1))
if size < 1024:
size = str(size)+"K"
elif size < 1024 ** 2:
size = str(size/1024)+"M"
else:
size = str(size/(1024 ** 2))+"G"
print "%s%s"%(size,mo.group(2))
else:
print line