2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

Wie erhält man die zusammengefassten Größen von Verzeichnissen und ihren Unterverzeichnissen?

Nehmen wir an, ich möchte die Größe jedes Verzeichnisses eines Linux-Dateisystems ermitteln. Wenn ich ls -la verwende, bekomme ich nicht wirklich die zusammengefasste Größe der Verzeichnisse.

Wenn ich df verwende, bekomme ich die Größe jedes gemounteten Dateisystems, aber das hilft mir auch nicht weiter. Und mit du erhalte ich die Größe jedes Unterverzeichnisses und die Zusammenfassung des gesamten Dateisystems.

Aber ich möchte nur die zusammengefasste Größe jedes Verzeichnisses innerhalb des ROOT-Ordners des Dateisystems haben. Gibt es einen Befehl, um das zu erreichen?

Antworten (9)

450
450
450
2010-07-11 17:28:23 +0000

Dies tut, wonach Sie suchen:

du -sh /*

Was bedeutet dies:

  • -s, um nur die Gesamtsumme für jedes Kommandozeilenargument anzugeben.
  • -h für menschenlesbare Suffixe wie M für Megabyte und G für Gigabyte (optional).
  • /* wird einfach auf alle Verzeichnisse (und Dateien) in / erweitert.

Nützlich ist auch die Sortierung nach Größe:

du -sh /* | sort -h

Hier:

  • -h stellt sicher, dass sort die menschenlesbaren Suffixe korrekt interpretiert.
84
84
84
2010-07-29 12:07:31 +0000

Um eine sortierte Liste mit den 20 größten Verzeichnissen zu erhalten, mache ich folgendes:

du -m /some/path | sort -nr | head -n 20

In diesem Fall werden die Größen in Megabyte angegeben.

24
24
24
2015-12-24 10:07:52 +0000

Ich verwende gerne Ncdu dafür, man kann den Cursor zum Navigieren und Drilldown durch die Verzeichnisstruktur verwenden, es funktioniert wirklich gut.

12
12
12
2012-11-22 16:53:04 +0000

Die vorhandenen Antworten sind sehr hilfreich, vielleicht findet dies auch ein Anfänger (wie ich) hilfreich.

  1. Sehr einfache Schleife, aber für mich war dies ein guter Anfang für einige andere größenbezogene Operationen:

  2. Sehr ähnlich wie die erste Antwort und fast dasselbe Ergebnis wie 1.), aber ich brauchte einige Zeit, um den Unterschied von * zu ./* zu verstehen, wenn es sich um ein Unterverzeichnis handelt:

9
9
9
2010-07-11 17:29:10 +0000

Die folgende du-Aufrufung sollte auf BSD-Systemen funktionieren:

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

Das ist nicht leicht. Der Befehl du zeigt entweder Dateien und Ordner (Standardeinstellung) oder nur die Größen aller Elemente, die Sie in der Befehlszeile angeben (Option -s).

Um die größten Elemente (Dateien und Ordner), sortiert, mit menschenlesbaren Größen unter Linux zu erhalten:

du -h | sort -h

Dies wird Sie in einer Tonne kleiner Dateien begraben. Sie können sie mit --threshold (1 MB in meinem Beispiel) loswerden:

du --threshold=1M -h | sort -h

Der Vorteil dieses Befehls ist, dass er auch Ordner mit versteckten Punkten (Ordner, die mit . beginnen) einschließt.

Wenn Sie wirklich nur die Ordner wollen, müssen Sie find verwenden, aber das kann sehr, sehr langsam sein, da du viele Ordner mehrmals scannen muss:

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
2
2
2
2013-10-05 15:36:58 +0000

Beachten Sie, dass Sie Verzeichnisse mit du auf verschiedenen Systemen/Maschinen nicht vergleichen können, ohne sicher zu sein, dass beide die gleiche Blockgröße des Dateisystems haben. Das kann zÃ?hlen, wenn Sie einige Dateien von einer Linux-Maschine auf ein nas synchronisieren und Sie das synchronisierte Verzeichnis selbst vergleichen wollen. Sie könnten unterschiedliche Ergebnisse mit du aufgrund unterschiedlicher Blockgrößen erhalten….

1
1
1
2010-07-12 19:42:17 +0000

Vielleicht möchten Sie sich auch xdiskusage ansehen. Hier erhalten Sie die gleichen Informationen, aber grafisch dargestellt, plus die Möglichkeit zum Drilldown (sehr nützlich). Es gibt weitere ähnliche Programme für KDE und sogar für Windows.

1
1
1
2016-12-20 09:56:34 +0000

Sie können ls in Verbindung mit awk verwenden:

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

Die Ausgabe von ls wird an awk weitergeleitet. awk beginnt mit der Verarbeitung der Daten. Standard-Begrenzer ist das Leerzeichen. Die Summenvariable tot wird auf Null initialisiert; die folgende Anweisung wird für jede von ls ausgegebene Zeile/Zeile ausgeführt. Sie inkrementiert tot lediglich um die Größe. $5 steht für die fünfte Spalte (ausgegeben von ls). Am Ende teilen wir durch (1024*1024), um in Megabyte zu summieren.

Wenn Sie dies in ein Skript oder eine Funktion (.bashrc) umwandeln würden, können Sie es auch benutzen, um die Größe bestimmter Untermengen von Verzeichnissen, je nach Dateityp, zu erhalten.

Wenn Sie systemweite Informationen wünschen, könnte kdirstat nützlich sein!