du -h --max-depth=1 . | sort -rh zeigt eine Ebene des Baums, die größte zuerst. Das wiederholst du dann im größten Eintrag, bis du den Übeltäter findest. Dieser Abstieg — nicht ein cleverer Befehl — ist die Technik.
1. Eine Ebene, die größte zuerst
$ clai zeig mir hier die Ordnergrößen, eine Ebene tief, größte zuerst→ du -h --max-depth=1 . | sort -rh348K .296K ./a52K ./c
sort -rh sortiert menschenlesbare Größen korrekt — es weiß, dass 2G größer ist als 900M, was ein einfaches sort -r nicht weiß.
2. Geh dahin, wo die Größe ist
$ clai mach jetzt dasselbe im größten Ordner→ du -h --max-depth=1 ./a | sort -rh
Zwei oder drei Wiederholungen davon führen meist zur Antwort. Das ist schneller als ein vollständiger Scan des Baums, weil du nie die Zweige liest, die nicht wichtig sind.
3. Andere Dateisysteme nicht mitzählen
$ clai Gesamtgröße von / aber bleib nur auf diesem Dateisystem→ du -shx /348G /
-x hindert du daran, in andere Mountpoints abzusteigen. Ohne das wandert ein Scan von / in /mnt, Netzwerkfreigaben und Bind-Mounts ab und liefert eine Zahl, die nichts mit der Platte zu tun hat, die du eigentlich freiräumen willst.
4. Die größten einzelnen Dateien
$ clai finde die 10 größten Dateien unter /var→ sudo find /var -xdev -type f -printf '%s\t%p\n' | sort -rn | head -10
Manchmal ist es kein Ordner, sondern ein einziges 40-GB-Log. -xdev ist bei find das Gegenstück zu du -x.
5. Interaktiv durchsuchen
$ clai durchsuche die Speichernutzung interaktiv unter /var→ ncdu -x /var
ncdu scannt einmal und lässt dich mit den Pfeiltasten durch den Baum gehen und dabei löschen. Wenn du du mehr als zweimal ausführen willst, installiere lieber das hier.
6. Dort ausführen, wo alles gelesen werden darf
$ clai scanne / nach Ordnergrößen ohne Berechtigungs-Rauschen→ sudo du -h --max-depth=1 -x / 2>/dev/null | sort -rh | head
Ohne sudo überspringt du stillschweigend Verzeichnisse, die es nicht betreten kann, und unterschätzt das Ergebnis. Mit sudo blendet 2>/dev/null das Rauschen von Dateien aus, die mitten im Scan verschwinden.
Stolperfallen
dumisst belegte Blöcke, nicht den Dateiinhalt. Eine Million 1-Byte-Dateien belegt weit mehr als eine Million Bytes.du --apparent-sizezeigt die andere Zahl.- Wenn
duunddfstark voneinander abweichen, stopp. Das ist ein anderes Problem — gelöschte Dateien, die noch offen gehalten werden, oder erschöpfte Inodes. Siehe den verlinkten Artikel. --max-depthgibt es nur bei GNU. Auf macOS ist das Äquivalentdu -d 1, undsort -rhbraucht ein aktuelles BSD sort oder coreutils.
Verwandte Fragen
Warum ist du so langsam? Es macht einen stat-Aufruf für jede Datei im Baum. Bei Netzwerk-Dateisystemen oder Millionen kleiner Dateien ist das wirklich langsam — grenze den Pfad ein oder nutze ncdu, das den Scan wenigstens cached.
Was ist der Unterschied zwischen du -s und du -h --max-depth=1? -s gibt eine Gesamtsumme für den ganzen Pfad aus; --max-depth=1 gibt eine Zeile pro Kind aus. Nimm -s, wenn du schon weißt, wo du nachsehen musst.
Wie finde ich Ordner über einer bestimmten Größe? Durch awk pipen: du -m --max-depth=2 . | awk '$1 > 1000' listet alles über 1 GB auf.
Siehe auch
- Schluss mit find-Flags auswendig lernen: sag einfach, was du willst
- df sagt, die Platte ist voll, du sagt, sie ist es nicht
- Docker hat deine Platte gefressen: so holst du dir den Platz zurück
Sag, welche Ordnergrößen du sehen willst, und CliAI schreibt das du, das sort -rh und das -x. In einer Zeile installieren.