Wie kann man den im Verzeichnis gespeicherten Betrag rekursiv finden?

136

Ich weiß, dass Sie die Bytegröße einer Datei sehen können, wenn Sie eine lange Auflistung mit lloder machen ls -l. Aber ich möchte wissen, wie viel Speicher in einem Verzeichnis vorhanden ist, einschließlich der Dateien in diesem Verzeichnis und der darin enthaltenen Unterverzeichnisse usw. Ich möchte nicht die Anzahl der Dateien, sondern die Menge an Speicher, die diese Dateien belegen.

Ich möchte also rekursiv wissen, wie viel Speicher in einem bestimmten Verzeichnis vorhanden ist. Ich vermute, wenn es einen Befehl gibt, würde er in Bytes sein.

Rob Avery IV
quelle

Antworten:

146

Versuchen Sie Folgendes:

du -s dir

oder

du -sh dir

-hUnterstützung benötigt , hängt von Ihrem Betriebssystem ab.

Sehen

man du
Gilles Quenot
quelle
2
Add -bto Output in Bytes
pcnate
4
--alle liste alle dateien auf und -h zeigt die dateigröße im menschenlesbaren format du -h --alle
Praneeth
29

Du machst einfach:

du -sh /path/to/directory

Wo -sist für Zusammenfassung und -hfür Menschen lesbar ( nicht standardmäßige Option).

Seien Sie vorsichtig , aber im Gegensatz zu ls, wird dies nicht zeigen Ihnen , Dateigröße , aber Festplattennutzung (dh ein Vielfaches der Dateisystem - Blockgröße), aber die Datei kann kleiner sein , oder sogar noch größer, so dass Sie die verwenden können , --apparent-sizeOption:

du -sh --apparent-size /path/to/directory

Dies ist die Größe, die bei Bedarf über das Netzwerk übertragen werden würde.

Tatsächlich enthält die Datei möglicherweise "Löcher" (leere Shell), ist möglicherweise kleiner als die Blockgröße des Dateisystems, ist möglicherweise auf Dateisystemebene komprimiert usw. Die Manpage erklärt dies.

Wie Nicklas betont, können Sie auch den ncduDisk Usage Analyzer verwenden. Aus einem Verzeichnis heraus gestartet, zeigt es Ihnen, welche Ordner und Dateien Speicherplatz belegen, indem sie von der größten zur kleinsten geordnet werden.

Sie können diese Frage auch sehen.

Totor
quelle
19

Beachten Sie, dass Sie, wenn Sie die Größe aller {sub} -Ordner in einem Verzeichnis wissen möchten, auch die Option -doder verwenden können (für die ein Argument gilt: das rekursive Limit).--max-depthdu

Zum Beispiel :

du -h /path/to/directory -d 1

Wird dir sowas zeigen

4.0K /path/to/directory/folder1
16M  /path/to/directory/folder2
2.4G /path/to/directory/folder3
68M  /path/to/directory/folder4
8G   /path/to/directory/folder5

PS: Die Eingabe 0als rekursives Limit entspricht der -sOption. Mit diesen beiden Befehlen erhalten Sie dasselbe Ergebnis (die von Menschen lesbare Größe Ihres angegebenen Verzeichnisses ist rekursiv):

du -h /path/to/directory -d 0
du -sh /path/to/directory
Flo Schild
quelle
-d 1muss vor dem Verzeichnispfad stehen
Abhinav Singi
Braucht? Es funktioniert für mich nach dem Verzeichnispfad unter Ubuntu / Debian. Es ist schöner, es vorher zu haben, ich stimme zu
Flo Schild
14

Eine Alternative zu dem bereits erwähnten duBefehl wäre ncduein netter Disk-Use-Analyzer zur Verwendung im Terminal. Möglicherweise müssen Sie es zuerst installieren, es ist jedoch in den meisten Paket-Repositorys verfügbar.

Bearbeiten: Für das Ausgabeformat siehe diese Screenshots http://dev.yorhel.nl/ncdu/scr

Niklas
quelle
Wunder! Hiermit kann ich sehen, welche Ordner ein hohes Speichervolumen aufweisen. Ich fand sogar alle meine Akten, die auf mysteriöse Weise verschwunden waren. Es ist ein großartiges Werkzeug.
Faron
11

Dadurch erhalten Sie eine Liste der Größen aus dem aktuellen Verzeichnis, einschließlich Ordner (rekursiv) und Dateien.

$ du -hs *
7.5M    Applications
9.7M    Desktop
 85M    Documents
 16K    Downloads
 12G    Google Drive
 52G    Library
342M    Movies
8.3M    Music
780M    Pictures
8.5G    Projects
8.0K    Public
 16K    client1.txt
Simon Liu
quelle
3
nach größe bestellen: du -hs * | sort -hs
Kaiser
3

In Unix enthält ein Verzeichnis nur Namen und Verweise auf Dateisystemobjekte (Inodes, die auf Verzeichnisse, Dateien oder andere exotische Dinge verweisen können). Eine Datei kann unter mehreren Namen im selben Verzeichnis oder in mehreren Verzeichnissen aufgeführt sein. "Vom Verzeichnis und den darin enthaltenen Dateien belegter Speicherplatz" macht also wirklich keinen Sinn, da die Dateien nicht "darin" sind.

Das heißt, der Befehl du(1)listet den von einem Verzeichnis belegten Speicherplatz und alles, was über ihn erreichbar ist, in du -seiner Zusammenfassung auf, wobei -heinige Implementierungen wie GNU dueine "vom Menschen lesbare" Ausgabe liefern (dh Kilobyte, Megabyte).

vonbrand
quelle
1

Bei mir hat es bei der Tiefe und dem Pfad auf einem OS X El Capitán rückwärts geklappt

du -h -d 1 /path/to/directory
GZepeda
quelle
1

Sie können "file-size.sh" aus der awk Velour-Bibliothek verwenden :

ls -ARgo "$@" | awk '{q += $3} END {print q}'
Steven Penny
quelle