Wie kann ich die Ausgabe von du -h nach Größe sortieren?

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?

du | sort -nr | cut -f2- | xargs du -hs
Kommentare (8)

Soweit ich sehen kann, haben Sie drei Möglichkeiten:

  1. Ändern Sie du, um vor der Anzeige zu sortieren.
  2. Ändern Sie sort, um menschliche Größen für numerische Sortierung zu unterstützen.
  3. Nachbearbeitung der Ausgabe von "sort", um die Grundausgabe menschenlesbar zu machen.

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
Kommentare (0)

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.

Kommentare (0)