Ich benötige eine Liste der für Menschen lesbaren du-Ausgabe.
Allerdings hat du
keine "Sortieren nach Größe" Option, und piping zu sort
funktioniert nicht mit dem human readable flag.
Zum Beispiel: Ausführen:
du | sort -n -r
Gibt eine nach Größe sortierte Festplattennutzung aus (absteigend):
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
Wenn Sie das Programm jedoch mit dem Flag "für Menschen lesbar" ausführen, wird die Sortierung nicht korrekt durchgeführt:
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
Kennt jemand eine Möglichkeit, du -h
nach Größe zu sortieren?
Soweit ich sehen kann, haben Sie drei Möglichkeiten:
du
, um vor der Anzeige zu sortieren.sort
, um menschliche Größen für numerische Sortierung zu unterstützen.Sie könnten auch du -k
machen und mit Größen in KiB leben.
Für Option 3 könnten Sie das folgende Skript verwenden:
#!/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
Zumindest mit den üblichen Werkzeugen wird dies aufgrund des Formats der menschenlesbaren Zahlen schwierig sein (beachten Sie, dass sort hier eine "gute Arbeit" leistet, da es die Zahlen sortiert - 508, 64, 61, 2, 2 - es kann nur keine Fließkommazahlen mit einem zusätzlichen Multiplikator sortieren).
Ich würde es andersherum versuchen - die Ausgabe von "du | sort -n -r" verwenden und die Zahlen anschließend mit einem Skript oder Programm in ein menschenlesbares Format umwandeln.