Ich brauche eine Liste der von Menschen lesbaren Du-Ausgaben.
Es gibt du
jedoch keine Option " Nach Größe sortieren", und die Weiterleitung sort
funktioniert nicht mit dem für Menschen lesbaren Flag.
Zum Beispiel läuft:
du | sort -n -r
Gibt eine sortierte Datenträgerverwendung nach Größe aus (absteigend):
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
Wenn Sie es jedoch mit dem von Menschen lesbaren Flag ausführen, wird nicht ordnungsgemäß sortiert:
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
, fügen aber das -h zumsort
Befehl hinzu. Sie können hinzufügen,-rh
dass die größten zuerst in der Datei sind, andernfalls müssentail
Sie die Space Hogs sehen.Antworten:
Ab GNU Coreutils 7.5, das im August 2009 veröffentlicht wurde,
sort
ist ein-h
Parameter zulässig, der numerische Suffixe der folgenden Art zulässtdu -h
:Wenn Sie eine Sortierung verwenden, die nicht unterstützt
-h
, können Sie GNU Coreutils installieren. ZB auf einem älteren Mac OS X:Aus dem
sort
Handbuch :-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
quelle
du -BM | sort -nr
als Workaround getan - es ist gut lesbar und wird sortiert, wenn jemand mit älteren Coreutils feststeckt.du -hs * | gsort -h
du -BM
druckt alles in Megabyte, sodass eine Datei mit 168 KB tatsächlich als 0 MB angezeigt wird. Es sei denn, es gibt eine andere Versionsdiskrepanz, die mir nicht bekannt ist. Meine Version vondu
zeigt nur Ganzzahl-Megabyte-Werte.quelle
@Douglas Leeder, noch eine Antwort: Sortiere die lesbare Ausgabe von du -h mit einem anderen Tool. Wie Perl!
Teilen Sie die Anzeige in zwei Zeilen auf. Sie können es auf diese Weise verwenden oder als Einzeiler verwenden, es funktioniert in beiden Richtungen.
Ausgabe:
BEARBEITEN: Nach ein paar Runden Golf bei PerlMonks lautet das Endergebnis wie folgt:
quelle
stderr
weildie
Sie sie ändern können, um sie an auszugebenstdout
?die
zu aprint
und es wird zu gehenstdout
. Es sind nur noch zwei Charaktere.Es gibt ein immens nützliches Tool namens ncdu , mit dem sich die lästigen Ordner und Dateien mit hohem Festplattenverbrauch finden und entfernen lassen. Es ist konsolenbasiert, schnell und leicht und enthält Pakete für alle wichtigen Distributionen.
quelle
du
, wenn Sie nur die großen Verzeichnisse identifizieren möchten.quelle
du -k --total
, gibt Fehler am Endedu: cannot access 'total': No such file or directory
head
indem Sie `| hinzufügen head -50` am ende.Soweit ich sehe, haben Sie drei Möglichkeiten:
du
die Sortierung vor der Anzeige.sort
, um menschliche Größen für die numerische Sortierung zu unterstützen.Sie können auch
du -k
mit Größen in KiB leben.Für Option 3 können Sie das folgende Skript verwenden:
quelle
Ich hatte auch dieses Problem und verwende derzeit eine Problemumgehung:
Dies erzeugt keine skalierten Werte, sondern immer die Größe in Megabyte. Das ist weniger als perfekt, aber für mich ist es besser als nichts (oder die Größe in Bytes anzeigen).
quelle
Habe diesen Beitrag woanders gefunden. Daher wird dieses Shell-Skript tun, was Sie wollen, ohne
du
alles zweimal aufzurufen . Es nutztawk
das rohe Bytes auf ein lesbares Format zu konvertieren. Natürlich ist die Formatierung etwas anders (alles wird mit einer Genauigkeit von einer Dezimalstelle gedruckt).Wenn Sie dies in meinem
.vim
Verzeichnis ausführen, erhalten Sie:(Ich hoffe, 3.6M Farbschemata sind nicht übermäßig.)
quelle
In dieser Version werden
awk
zusätzliche Spalten für Sortierschlüssel erstellt. Es ruft nurdu
einmal an. Die Ausgabe sollte genau so aussehendu
.Ich habe es in mehrere Zeilen aufgeteilt, aber es kann wieder zu einem Einzeiler kombiniert werden.
Erläuterung:
Versuchen Sie es ohne den
cut
Befehl, um zu sehen, was es tut.Hier ist eine Version, die das Sortieren innerhalb des AWK-Skripts übernimmt und nicht benötigt
cut
:quelle
du -sh *
, um nur die unmittelbaren Dateien und Verzeichnisse ohne rekursiven Abstieg anzuzeigen.Hier ist ein Beispiel, das die Verzeichnisse in kompakterer, zusammengefasster Form zeigt. Es behandelt Leerzeichen in Verzeichnis / Dateinamen.
quelle
Dateien nach Größe in MB sortieren
quelle
Ich habe einen einfachen, aber nützlichen Python-Wrapper für du namens dutop . Beachten Sie, dass wir (die Betreuer von coreutils) erwägen, die Funktion zum Sortieren hinzuzufügen, um die "menschliche" Ausgabe direkt zu sortieren.
quelle
sort
Flagge)Habe noch einen:
Ich fange an, Perl zu mögen. Möglicherweise müssen Sie eine
zuerst. An alle Perl-Hacker: Ja, ich weiß, dass der Sortiervorgang auch in Perl durchgeführt werden kann. Wahrscheinlich auch der Du-Teil.
quelle
Dieser Ausschnitt wurde unverschämt aus 'Jean-Pierre' von http://www.unix.com/shell-programming-scripting/32555-du-h-sort.html entnommen . Gibt es eine Möglichkeit, ihn besser zu würdigen?
quelle
23423423432423
Verwenden Sie das Flag "-g"
Und in meinem / usr / local-Verzeichnis wird folgende Ausgabe erzeugt:
quelle
Noch einer:
quelle
Hier ist die einfache Methode, die ich verwende, die sehr wenig Ressourcen verbraucht und Ihnen das bietet, was Sie brauchen:
quelle
Fand dieses online ... scheint in Ordnung zu sein
quelle
Ich habe awk gelernt, als ich gestern dieses Beispiel erfunden habe. Es hat einige Zeit gedauert, aber es hat großen Spaß gemacht und ich habe gelernt, wie man awk benutzt.
Es wird nur einmal ausgeführt und hat eine Ausgabe, die der von du -h sehr ähnlich ist
Es zeigt Zahlen unter 10 mit einem Dezimalpunkt.
quelle
du -cka --max-depth = 1 / var / log | sort -rn | Kopf -10 | awk '{print ($ 1) / 1024, "MB", $ 2'}
quelle
Wenn Sie mit Leerzeichen umgehen müssen, können Sie Folgendes verwenden
Die zusätzliche sed-Anweisung hilft, Probleme mit Ordnern mit Namen wie Application Support zu beheben
quelle
Voilà:
quelle
http://dev.yorhel.nl/ncdu
Befehl: ncdu
Verzeichnisnavigation, Sortierung (Name und Größe), grafische Darstellung, lesbar, usw.
quelle
Eine andere
awk
Lösung -quelle
Ich hatte die von @ptman bereitgestellte Lösung verwendet, aber eine kürzliche Serveränderung machte sie nicht mehr brauchbar. Stattdessen verwende ich das folgende Bash-Skript:
quelle
du -d 1
Syntax wird von GNU du seit der Veröffentlichung von Coreutils 8.6 im Jahr 2010 unterstützt (obwohl die erste Red Hat-Verfügbarkeit RHEL 7 im Jahr 2014 war), sodass Sie sie nicht mehr benötigen--maxdepth=1
. Ich habe nur herausgefunden, über das kürzlich selbst.quelle
Hier gibt es viele Antworten, von denen viele Duplikate sind. Ich sehe drei Trends: Weiterleiten durch einen zweiten Aufruf, Verwenden von kompliziertem Shell- / AWK-Code und Verwenden anderer Sprachen.
Hier ist eine POSIX-kompatible Lösung mit du und awk , die auf jedem System funktionieren sollte.
Ich habe einen etwas anderen Ansatz gewählt, um
-x
sicherzustellen, dass wir auf demselben Dateisystem bleiben (ich brauche diesen Vorgang immer nur, wenn ich nur wenig Speicherplatz habe. Warum sollte ich also Dinge aussortieren, die ich in diesen FS-Baum eingebunden oder verschoben habe?) Symlinked Back?) und Anzeige konstanter Einheiten, um das visuelle Parsen zu vereinfachen. In diesem Fall entscheide ich mich normalerweise, nicht zu sortieren, um die hierarchische Struktur besser erkennen zu können.(Da diese Einheit konsistent ist, können Sie sie anhängen,
| sort -n
wenn Sie wirklich sortierte Ergebnisse wünschen .)Dadurch werden alle Verzeichnisse herausgefiltert, deren (kumulativer) Inhalt 512 MB nicht überschreitet, und anschließend werden Größen in Gigabyte angezeigt. Standardmäßig verwendet du eine Blockgröße von 512 Byte (daher beträgt der awk-Zustand von 2 20 Blöcken 512 MB, und sein 2 21- Divisor wandelt die Einheiten in GB um - wir könnten es
du -kx
mit$1 > 512*1024
und verwendens/1024^2
, um besser lesbar zu sein). Innerhalb der awk-Bedingung stellen wirs
die Größe ein, damit wir sie aus der Zeile entfernen können ($0
). Dadurch bleibt das Trennzeichen (das auf ein einzelnes Leerzeichen reduziert ist) erhalten, sodass das Finale%s
ein Leerzeichen und anschließend den Namen des aggregierten Verzeichnisses darstellt.%7s
richtet die gerundete%.2f
GB-Größe aus (erhöhen auf%8s
> 10 TB).Im Gegensatz zu den meisten Lösungen werden hier Verzeichnisse mit Leerzeichen im Namen ordnungsgemäß unterstützt (obwohl jede Lösung, einschließlich dieser, Verzeichnisnamen mit Zeilenumbrüchen falsch behandelt).
quelle
Zumindest mit den üblichen Tools wird dies aufgrund des Formats der lesbaren Zahlen schwierig sein (beachten Sie, dass sort hier einen "guten Job" macht, da es die Zahlen sortiert - 508, 64, 61, 2, 2 - it Fließkommazahlen können nur nicht mit einem zusätzlichen Multiplikator sortiert werden.
Ich würde es anders herum versuchen - verwende die Ausgabe von "du | sort -n -r" und konvertiere die Zahlen anschließend mit einem Skript oder Programm in ein für Menschen lesbares Format.
quelle
Was Sie versuchen können, ist:
Ich hoffe, das hilft.
quelle
xargs
daher war dieses Formular erforderlich. Für Dateien mit Leerzeichen müssen Sie jedoch IFS festlegen:IFS=$'\n'
quelle