Wie bestimme ich die Gesamtgröße eines Verzeichnisses (Ordners) über die Befehlszeile?

786

Gibt es einen einfachen Befehl zum Anzeigen der Gesamtgröße (Festplattennutzung) aller Dateien in einem Verzeichnis (Ordner)?

Ich habe diese ausprobiert und sie machen nicht das, was ich will:

  • ls -l, die nur die Größe der einzelnen Dateien in einem Verzeichnis anzeigt, noch
  • df -h, die nur den freien und belegten Speicherplatz auf meinen Festplatten anzeigt.
David Barry
quelle
Standortübergreifendes Duplikat: Wie erhalte ich die Größe eines Verzeichnisses in der Befehlszeile?
Peter Mortensen
Freundliche Erinnerung, dass es auf CoW-Dateisystemen wie BTRFS fast keinen Sinn ergibt.
val

Antworten:

1266

Der Befehl du"fasst die Festplattennutzung jeder DATEI rekursiv für Verzeichnisse zusammen", z.

du -hs /path/to/directory
  • -hist auf die Zahlen „human readable“, zB bekommen zu bekommen 140Mstatt 143260(Größe in KBytes)
  • -sist für die Zusammenfassung (ansonsten erhalten Sie nicht nur die Größe des Ordners, sondern auch für alles im Ordner separat)

Während der Verwendung können -hSie die vom Menschen lesbaren Werte mit sortieren

du -h | sort -h

Das -hFlag on sortberücksichtigt die Größenwerte für "Human Readable".


Wenn Sie vermeiden möchten, alle Dateien und Verzeichnisse rekursiv aufzulisten, können Sie den --max-depthParameter angeben, um die Anzahl der angezeigten Elemente zu begrenzen. Am häufigsten,--max-depth=1

du -h --max-depth=1 /path/to/directory
Marcel Stimberg
quelle
9
Respekt für die Extrameile. :)
Myusuf3
93
Ich benutze du -shoder DOOSH, um mich daran zu erinnern (HINWEIS: Der Befehl ist derselbe, nur die Organisation von Befehlszeilen-Flags für Speicherzwecke)
Marco Ceppi
3
Es gibt eine nützliche Option namens --apparent-size. Es kann verwendet werden, um die tatsächliche Größe einer Datei oder eines Verzeichnisses zu ermitteln (im Gegensatz zum Platzbedarf auf der Festplatte). Eine Textdatei mit nur 4 Zeichen belegt z. B. ungefähr 6 Bytes, nimmt jedoch immer noch ~ 4 KB in Anspruch eine reguläre Ausgabe von du -sh. Wenn Sie jedoch die Option --apparent-size übergeben, wird die Ausgabe 6 lauten. Obwohl die scheinbare Größe normalerweise kleiner ist, kann sie aufgrund von Löchern in ('spärlichen') Dateien, interner Fragmentierung und indirekten Blöcken größer sein
Hopping Bunny
4
Dies funktioniert auch für OS X! Danke, ich habe wirklich nach einer Möglichkeit gesucht, Dateien sowohl auf meinem lokalen Computer als auch auf meinem Server zu löschen, aber automatisierte Methoden schienen nicht zu funktionieren. Also rannte ich los du -hs *und ging in das größte Verzeichnis und fand heraus, welche Dateien so groß waren ... Dies ist eine so gute Methode, und das Beste daran ist, dass Sie nichts installieren müssen! Auf jeden Fall verdient meine upvote
Dev
@BandaMuhammadAlHelal Ich denke, es gibt zwei Gründe: Rundung ( duhat eine etwas eigenartige Rundung, die keine Dezimalstellen anzeigt, wenn der Wert mehr als eine Ziffer in der gewählten Einheit hat) und das klassische 1024-gegen-1000-Präfix- Problem. duhat eine Option -B(oder --block-size) , um die Einheiten zu ändern , in der sie Werte anzeigt, oder könnten Sie verwenden , -banstatt -hden „rohen“ Wert in Bytes zu erhalten.
Marcel Stimberg
164

Kürzlich habe ich ein großartiges, auf ncurses basierendes interaktives Tool gefunden, das Ihnen schnell einen Überblick über die Verzeichnisgrößen gibt. Suchte jahrelang nach solchen Werkzeugen.

  • Schneller Drilldown durch die Dateihierarchie
  • Sie können zB große temporäre Dateien aus dem Tool löschen
  • extrem schnell

Betrachten Sie es als Baobab für die Befehlszeile:

apt-get install ncdu
geekQ
quelle
11
Das ist absolut fantastisch! Wie DaisyDisk für OSX
subZero
3
ncduist großartig! Tun Sie dies einfach, nachdem Sie es installiert haben ncdu /. Sie werden sehr schnell die größten Dateien auf dem System finden. Drücken Sie auch, hwährend Sie sich in der Konsole von ncdu befinden. Es hat sehr nützliche Abkürzungen
vlad-ardelean
Genau das habe ich gebraucht: so einfach, so effizient. Pure Liebe.
user3790897
52

Dadurch wird die Größe rekursiv ermittelt und neben jedem Ordnernamen zusammen mit der Gesamtgröße unten im menschlichen Format angezeigt

du -hsc *
Brad
quelle
17

Genießen!

du foldername

Weitere Informationen zu diesem Befehl finden Sie hier

myusuf3
quelle
10

tree ist ein weiterer nützlicher Befehl für diesen Job:

Installieren Sie es einfach über sudo apt-get install treeund geben Sie Folgendes ein:

tree --du -h /path/to/directory
...
...

33.7M used in 0 directories, 25 files

Vom Menschenbaum :

-h    Print  the size of each file but in a more human readable way, e.g. appending a size letter for kilo‐
      bytes (K), megabytes (M), gigabytes (G), terabytes (T), petabytes (P) and exabytes (E).

--du  For each directory report its size as the accumulation of sizes of all its files and  sub-directories
      (and their files, and so on). The total amount of used space is also given in the final report (like
      the 'du -c' command.)
αғsнιη
quelle
9

Nachstehend ist aufgeführt, was ich zum Drucken der Gesamtgröße, des Ordners und der Dateigröße verwende:

$ du -sch /home/vivek/* | sort -rh

Einzelheiten

 ------------------------------------------------------------
   -c, --total
          produce a grand total
   -h, --human-readable
          print sizes in human readable format (e.g., 1K 234M 2G)
   -s, --summarize
          display only a total for each argument
 -------------------------------------------------------------
   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)
   -r, --reverse
          reverse the result of comparisons

Ausgabe

 70M    total
 69M    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/lib
992K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/results
292K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/target
 52K    /home/vivek/Downloads/gatling-charts-highcharts-bundle-2.2.2/user-files
vivekyad4v
quelle
4

Die Antworten haben deutlich gemacht, dass dies dudas Werkzeug ist, um die Gesamtgröße eines Verzeichnisses zu ermitteln. Es sind jedoch einige Faktoren zu berücksichtigen:

  • Gelegentlich kann die duAusgabe irreführend sein, da sie den vom Dateisystem zugewiesenen Speicherplatz angibt, der sich von der Summe der Größen der einzelnen Dateien unterscheiden kann. Normalerweise weist das Dateisystem einer Datei 4096 Byte zu, selbst wenn Sie nur ein Zeichen darin gespeichert haben!

  • Leistungsunterschiede aufgrund der Leistung von 2 und der Leistung von 10 Einheiten. Der -hSchalter zum duTeilen der Anzahl der Bytes durch 2 ^ 10 (1024), 2 ^ 20 (1048576) usw., um eine vom Menschen lesbare Ausgabe zu erhalten. Viele Menschen sind möglicherweise eher daran gewöhnt, Potenzen von 10 zu sehen (z. B. 1K = 1000, 1M = 1000000) und sind vom Ergebnis überrascht.

Gehen Sie wie folgt vor, um die Gesamtsumme der Größen aller Dateien in einem Verzeichnis in Byte zu ermitteln:

find <dir> -ls | awk '{sum += $7} END {print sum}'

Beispiel:

$ du -s -B 1
255729664

$ find .  -ls | awk '{sum += $7} END {print sum}'
249008169
pdp
quelle
Die Funktion find-ls-awk gibt für große Ordner # 1 einen falschen Wert zurück . Für neuere awk können Sie hinzufügen --bignumoder -M; Wenn dies keine Option ist, verwenden Sie find . -ls | tr -s ' '|cut -d' ' -f 7| paste -sd+ |bc # 2 .
goozez
Wenn Potenzen von 2 verwendet werden, gibt es die --siOption: "Wie -h, aber verwenden Sie Potenzen von 1000, nicht 1024"
muru
1

Verwenden Sie die folgenden Angaben nur für die Verzeichnisgröße in einem lesbaren Format:

du -hs directoryname

Dies ist wahrscheinlich nicht im richtigen Abschnitt, aber über die Befehlszeile können Sie versuchen:

ls -sh filename

Das -sist Größe und das -hist vom Menschen lesbar.

Verwenden Sie -lauf zeigen lsListe, wie unten:

ls -shl
Shiv Singh
quelle
0

du /foldernameist der Standardbefehl zum Ermitteln der Größe eines Ordners. Es wird empfohlen, die Optionen in der Manpage zu finden:

man du

Sie sollten die Online- Handbuchseite lesen, bevor Sie den Befehl verwenden.

Balaswamy vaddeman
quelle
0

Hier ist ein POSIX-Skript, mit dem Folgendes funktioniert:

  • Eine Datei
  • Dateien
  • Ein Verzeichnis
  • Verzeichnisse
#!/bin/sh
ls -ARgo "$@" | awk '{q += $3} END {print q}'

Quelle

Steven Penny
quelle
0

Wenn Ihr gewünschtes Verzeichnis viele Unterverzeichnisse enthält, verwenden Sie Folgendes:

$ cd ~/your/target/directory
$ du -csh 

-c, --total ergibt eine Gesamtsumme
-s, --summarize zeigt nur eine Gesamtsumme für jedes Argument an
-h, --menschlich lesbare Druckgrößen in menschlich lesbarem Format (zB 1K 234M 2G)

Dies würde dann eine Gesamtsumme des Speicherbedarfs aller Dateien / Ordner im aktuellen Verzeichnis ergeben.

kmario23
quelle
-1

Das Beste, was ich denke, ist das Folgende:

du -h directory_name | tail -n1

Dadurch wird nur die Größe des Verzeichnisses angezeigt, an dem Sie interessiert sind, und es werden keine Verzeichnisse und Dateien in diesem Verzeichnis gedruckt.

Ich sollte hinzufügen, dass, wenn die Größe des Ordners groß ist, Sie längere Zeit brauchen. Sie müssen geduldig sein, damit dieser Befehl ausgeführt werden kann. Wie bei jedem anderen Unix-Befehl können Sie die Gesamtzeit für diesen Vorgang ermitteln, indem Sie timevor diesem Befehl Folgendes ausführen :

time du -h directory_name | tail -n1
Friedlich
quelle
6
duhat eine Option dafür:-s
muru