Wie finde ich die platzsparendsten Verzeichnisse oder Dateien heraus?

11

Meiner Festplatte geht der Speicherplatz aus:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda7       803G  715G   48G  95% /home

Ich möchte das gesamte Home-Verzeichnis durchgehen und die 10 wichtigsten platzraubenden Verzeichnisse oder Dateien herausfinden, um zu entscheiden, wer entfernt werden soll.

du -sh *kann die Größe aller Unterverzeichnisse anzeigen, erhält jedoch nur den aktuellen Ordner. Möglicherweise muss ich mich in viele Unterverzeichnisse und rekursiv aufteilen, um herauszufinden, wer die Schuldigen sind, die ich brauche.

Gibt es eine gute Möglichkeit, dies zu tun?

Deqing
quelle

Antworten:

10

ncdu ist eine Befehlszeilenoption, die Verzeichnisse durchsucht und die Festplattennutzung vom höchsten zum niedrigsten Wert auflistet. Es ist mein Go-to-Tool dafür.

Sie müssen auf diese Weise immer noch rekursiv eintauchen, aber es ist eine schöne einfache Möglichkeit, dies zu tun.

rauben
quelle
9

Verwenden Sie diesen Befehl:

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');du / –exclude /proc –exclude /sys –max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++) {printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

Es zeigt Ihnen die Art eines Diagramms in der Befehlszeile, in dem die Verzeichnisse angezeigt werden, die den größten Teil des Speicherplatzes in Prozent beanspruchen.

Wenn Sie /homenur das analysieren möchten, können Sie dies im Befehl wie folgt angeben:

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');du /home –exclude /proc –exclude /sys –max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++) {printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

Es wird so aussehen: Geben Sie hier die Bildbeschreibung ein

Von hier genommen .

mnmnc
quelle
9

du | sort -rn | Kopf

  • du = Festplattennutzung
  • sortieren in numerischer Reihenfolge, umgekehrt
  • die zehn ersten Zeilen
Julien
quelle
4

+1 für Affenbrotbaum. In der Befehlszeile verwende ich normalerweise nur du -hcsx *oder du -hcsx * | sort -h(benötigt eine fehlerhafte aktuelle Version von sort) und überprüfe dann die Unterverzeichnisse, während ich fortfahre .

Außerdem mcgibt es eine nette Funktion zum Berechnen von Unterverzeichnisgrößen durch Drücken von Ctrl+ Spacedarüber (drücken Sie Ctrl+ Spaceoben .., um die Größe für alle Unterverzeichnisse zu berechnen. Anschließend können Sie im Menü nach Größe sortieren auswählen.

Stefan Seidel
quelle
2
In der Befehlszeile sollten Sie ncdu ausprobieren. Im Grunde ist es ein Fluch du.
Rob
1

Versuche dies:

du -a /dir | sort -nr | cut -f2 | xargs du -sh | head -n 10
Rajeev
quelle
0

Ein weiterer GUI-Favorit: kdirstat

Es verfügt über nette Drilldown-Funktionen und ein (erweiterbares) Werkzeugmenü, mit dem Sie Ihre Dateien löschen / komprimieren können.

Ich habe auch ein Befehlszeilenskript, das ich dir_usage nenne und das ich in pastebin hochgeladen habe.

Reiche Homolka
quelle
-1
find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

Die obige Befehlszeile führt Folgendes aus (in der angegebenen Reihenfolge):

  • Suchen Sie alle Dateien (keine Verzeichnisse) im aktuellen Ordner
  • Zeigen Sie die Verwendung für jeden von ihnen an
  • Sortieren Sie die Ergebnisse numerisch
  • Verwenden Sie nur die letzten 10 Zeilen (höchste Verwendung)
  • Schneiden Sie die 10 Dateinamen aus (erste Spalte ist Verwendung, zweite ist Dateiname)
  • Anzeige der Verwendung für jeden Dateinamen (im menschlichen Format)

Dies führt zu einer Liste der für Menschen lesbaren Größen der 10 größten Dateien im aktuellen Ordner und in den Unterordnern.

user275234
quelle
3
Können Sie Ihre Antwort erweitern?
50-3