Ik moet een lijst krijgen van menselijk leesbare du output.
Echter, du
heeft geen "sort by size" optie, en piping naar sort
werkt niet'met de menselijk leesbare vlag.
Bijvoorbeeld, het uitvoeren van:
du | sort -n -r
Geeft een gesorteerd schijfgebruik op grootte (aflopend):
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
Echter, het uitvoeren met de menselijk leesbare vlag, sorteert niet goed:
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
Kent iemand een manier om du -h
op grootte te sorteren?
Voor zover ik kan zien heb je drie opties:
du
om te sorteren voor weergave.sort
aan om menselijke maten te ondersteunen voor numeriek sorteren.Je zou ook du -k
kunnen doen en kunnen leven met groottes in KiB.
Voor optie 3 zou je het volgende script kunnen gebruiken:
#!/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
Tenminste met de gebruikelijke hulpmiddelen zal dit moeilijk zijn vanwege het formaat van de door mensen leesbare getallen (merk op dat sort hier een "goed werk" doet omdat het de getallen sorteert - 508, 64, 61, 2, 2 - het kan alleen geen drijvende komma getallen sorteren met een extra vermenigvuldiger).
Ik'zou het andersom proberen - gebruik de uitvoer van "du | sort -n -r" en zet daarna de getallen om naar menselijk leesbaar formaat met een of ander script of programma.