Zeigen Sie jede Unterverzeichnisgröße in einem Listenformat an, indem Sie einen einzeiligen Befehl in Bash?

100

Ich möchte eine Liste der Verzeichnisse und ihrer Größen in einem Listenformat erhalten, wie Sie es erhalten, wenn Sie eine ls -l.

Die Sache ist, dass es einen einzeiligen Befehl gibt, der dies tun kann? Ich sehe, dass andere lange Befehle haben, um dies auszugeben. Das ist einfach zu lang.

Welcher Befehl kann dies oder eine Kombination von Befehlen, die einfach eingegeben werden können? du -hgibt es, aber es zeigt alle Unterordner, was nicht das ist, was ich will. nur die aktuellen Verzeichnisse Ordner.

Patoshi パ ト ト
quelle

Antworten:

71

Sie möchten wahrscheinlich die Verzeichnisse nach Größe sortiert sehen:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp
Raychi
quelle
Dies funktioniert nicht, wenn sich eine große Anzahl von Einträgen im Verzeichnis befindet. bash: /run/current-system/sw/bin/du: Argument list too long
Chris Stryczynski
123

Versuche dies

du -h --max-depth=1

Ausgabe

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

Alternative

Wenn --max-depth=1es für Ihren Geschmack etwas zu lang ist, können Sie auch versuchen, Folgendes zu verwenden:

du -h -s *

Dies verwendet -s( --summarize) und druckt standardmäßig nur die Größe des Ordners. Durch die Übergabe aller Elemente im aktuellen Arbeitsverzeichnis ( *) wird eine ähnliche Ausgabe erzeugt wie --max-depth=1bei:

Ausgabe

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

Der Unterschied ist subtil. Der vorherige Ansatz zeigt die Gesamtgröße des aktuellen Arbeitsverzeichnisses und die Gesamtgröße aller darin enthaltenen Ordner an ... jedoch nur bis zu einer Tiefe von 1.

Der letztere Ansatz berechnet die Gesamtgröße aller übergebenen Elemente einzeln . Daher wird der Symlink lib64in die Ausgabe einbezogen, die ausgeblendeten Elemente (deren Name mit einem Punkt beginnt) werden jedoch ausgeschlossen. Es fehlt auch die Gesamtgröße für das aktuelle Arbeitsverzeichnis, da dies nicht als Argument übergeben wurde.

Der Hochstapler
quelle
4
Perfekte Antwort. Unter Mac OS X wird der --depthParameter nicht erkannt. Verwenden Sie du -h -d 1für das gleiche Ergebnis.
Dylan
6

Drucken Sie die Größe aller Ordner und versteckten Dateien auf der Festplatte:

el@dev /home/el $ du -sh `ls -a`
258M    .
265M    ..
4.0K    .classpath
258M    .git
4.0K    .gitignore
9.0K    nbactions.xml
12K     README
20K     .README.swp
4.0K    run.sh
23K    XmlPostPropagate.php
Eric Leschinski
quelle
2
Aber Vorsicht! Warum Sie die Ausgabe von ls (1)
Kamil Maciorowski
2

Erwähnenswert ist der Shell-Befehl NCurses Disk Usage .

Ncdu ist ein Datenträgerverwendungsanalysator mit einer Ncurses-Schnittstelle. Es wurde entwickelt, um Space Hogs auf einem Remote-Server zu finden, auf dem keine vollständige grafische Konfiguration verfügbar ist. Es ist jedoch ein nützliches Tool, selbst auf normalen Desktop-Systemen. Ncdu soll schnell, einfach und benutzerfreundlich sein und in jeder POSIX-ähnlichen Minimalumgebung mit installierten ncurses ausgeführt werden können.

Strahl
quelle