Wenn ich ls
oder verwende du
, erhalte ich den Speicherplatz, den jede Datei belegt.
Ich benötige die Gesamtsumme aller Daten in Dateien und Unterverzeichnissen, die ich erhalten würde, wenn ich jede Datei öffnen und die Bytes zählen würde. Bonuspunkte, wenn ich diese erhalten kann, ohne jede Datei zu öffnen und zu zählen.
ls
Zeigt tatsächlich die Anzahl der Bytes in jeder Datei an, nicht die Größe des Speicherplatzes. Reicht das für Ihre Bedürfnisse aus?du
diese Frage nicht beantwortet werden kann. Es zeigt den Speicherplatz an, den das Verzeichnis auf der Festplatte belegt (die Daten der Dateien plus die Größe der Metainformationen des zusätzlichen Dateisystems). Diedu
Ausgabe kann sogar kleiner sein als die Gesamtgröße aller Dateien. Dies kann passieren, wenn das Dateisystem komprimierte Daten auf der Festplatte speichern kann oder wenn feste Links verwendet werden. Richtige Antworten basieren aufls
undfind
. Sehen Sie die Antworten von Nelson und bytepan hier oder diese Antwort: unix.stackexchange.com/a/471061/152606Antworten:
Wenn Sie die 'scheinbare Größe' (dh die Anzahl der Bytes in jeder Datei) und nicht die Größe der Dateien auf der Festplatte möchten, verwenden Sie die Option
-b
oder--bytes
(wenn Sie ein Linux-System mit GNU- Coreutils haben ):quelle
du -shb
(wie in dieser Antwort vorgeschlagen)-b
scheint die-h
Einstellung die Einstellung zu überschreiben .du -sh --apparent-size /dir/
Verwendung
du -sb
:Fügen Sie optional die
h
Option für eine benutzerfreundlichere Ausgabe hinzu:quelle
brew install coreutils
. Es wird als Befehl verfügbar seingdu
.ls
->file.gz hardlink-to-file.gz
.stat -c %s file.gz
->9657212
.stat -c %s hardlink-to-file.gz
->9657212
.du -sb
->9661308
. Es ist definitiv nicht die Gesamtgröße des Inhalts, sondern die Größe, die das Verzeichnis auf der Festplatte einnimmt.CD ins Verzeichnis, dann:
ftw!
Ursprünglich schrieb hier darüber: https://ao.gl/get-the-total-size-of-all-the-files-in-a-directory/
quelle
-L
Option hinzufügen, damitdu
Symlinks folgen.Nur eine Alternative:
grep -v '^d'
schließt die Verzeichnisse aus.quelle
ls -lR | grep '.png$' | awk '{total += $5} END {print "Total:", total/1024/1024, "MB"}'
du
dieser Lösung zählt die Gesamtgröße aller Daten in Dateien wirklich so, als ob sie einzeln geöffnet und ihre Bytes gezählt würden. Aber ja, das Hinzufügen des-A
Parameters ist erforderlich, um auch versteckte Dateien zu zählen.Das "% s" -Format von stat gibt die tatsächliche Anzahl von Bytes in einer Datei an.
Fühlen Sie sich frei, Ihre Lieblingsmethode zum Summieren von Zahlen zu ersetzen .
quelle
find -print0
undxargs -0
werden für Dateinamen mit Leerzeichen benötigt. OS X willstat -f %z
.du
Berichten verwendet werden.)du
Dienstprogramm fälschlicherweise verwendet wird , ist diese Antwort korrekt. Die Antwort hier ist sehr ähnlich: unix.stackexchange.com/a/471061/152606 . Aber ich würde! -type d
stattdessen auch verwenden,-type f
um Symlinks zu zählen (die Größe des Symlinks selbst (normalerweise wenige Bytes), nicht die Größe der Datei, auf die es zeigt).Wenn Sie das "du" der Busybox in einem eingebetteten System verwenden, können Sie mit du keine genauen Bytes erhalten, sondern nur Kbytes, die Sie erhalten können.
quelle
Wenn ein Ordner erstellt wird, weisen viele Linux-Dateisysteme 4096 Byte zu, um einige Metadaten über das Verzeichnis selbst zu speichern. Dieser Speicherplatz wird um ein Vielfaches von 4096 Bytes erhöht, wenn das Verzeichnis wächst.
Der Befehl du (mit oder ohne Option -b) berücksichtigt dieses Leerzeichen , wie Sie sehen können, wenn Sie Folgendes eingeben:
Sie haben ein Ergebnis von 4096 Bytes für ein leeres Verzeichnis. Wenn Sie also 2 Dateien mit 10000 Bytes in das Verzeichnis einfügen , beträgt die von du -sb angegebene Gesamtmenge 24096 Bytes.
Wenn Sie die Frage sorgfältig lesen, ist dies nicht die Frage. Der Fragesteller fragte:
dass im obigen Beispiel 20000 Bytes sein sollten, nicht 24096.
Die richtige Antwort IMHO könnte also eine Mischung aus Nelson- Antwort und einem Vorschlag sein, mit Dateinamen umzugehen , die Leerzeichen enthalten:
quelle
Es gibt mindestens drei Möglichkeiten, um die "Gesamtsumme aller Daten in Dateien und Unterverzeichnissen" in Bytes zu ermitteln, die sowohl unter Linux / Unix als auch unter Git Bash für Windows funktionieren. Diese sind in der Reihenfolge vom schnellsten zum langsamsten im Durchschnitt aufgeführt. Zu Ihrer
docroot
Information wurden sie im Stammverzeichnis eines ziemlich tiefen Dateisystems ausgeführt ( in einer Magento 2 Enterprise-Installation mit 71.158 Dateien in 30.027 Verzeichnissen).1.
2.
3.
Diese beiden funktionieren auch, basieren jedoch auf Befehlen, die in Git Bash für Windows nicht vorhanden sind:
1.
2.
Wenn Sie nur die Summe für das aktuelle Verzeichnis möchten, fügen Sie dann
-maxdepth 1
zufind
.Beachten Sie, dass einige der vorgeschlagenen Lösungen keine genauen Ergebnisse liefern, daher würde ich mich stattdessen an die obigen Lösungen halten.
quelle
dc
ein Teil desbc
Pakets. Umdc
es zu erhalten , muss es installiert werdenbc
.Für Win32 DOS können Sie:
c:> dir / sc: \ Verzeichnis \ du \ willst
und die vorletzte Zeile gibt an, wie viele Bytes die Dateien belegen.
Ich weiß, dass dies alle Dateien und Verzeichnisse liest, aber in einigen Situationen schneller funktioniert.
quelle
du
ist praktisch, aberfind
nützlich, wenn Sie nur die Größe einiger Dateien berechnen möchten (z. B. Filter nach Erweiterung verwenden). Beachten Sie auch, dass siefind
selbst die Größe jeder Datei in Bytes drucken können. Um eine Gesamtgröße zu berechnen, können wir dendc
Befehl auf folgende Weise verbinden:Hier
find
wird eine Folge von Befehlen fürdc
like generiert123 + 456 + 11 +
. Das abgeschlossene Programm sollte jedoch wie0 123 + 456 + 11 + p
folgt aussehen (Postfix-Notation beachten ).Um das fertige Programm zu erhalten, müssen wir
0
vor dem Ausführen der Sequenz von stdin auf den Stapel legen und nach der Ausführung die oberste Nummer drucken (derp
Befehl am Ende). Wir erreichen es durchdc
Optionen:-e0
ist nur eine Abkürzung dafür-e '0'
, die0
auf den Stapel legt ,-f-
ist zum Lesen und Ausführen von Befehlen von stdin (das vonfind
hier erzeugte ),-ep
dient zum Drucken des Ergebnisses (-e 'p'
).Um die Größe in MiB zu drucken, wie
284.06 MiB
wir sie-e '2 k 1024 / 1024 / n [ MiB] p'
stattdessen in Punkt 3 verwenden können (die meisten Leerzeichen sind optional).quelle
Dies kann helfen:
Mit dem obigen Befehl werden alle Dateien summiert, die die Verzeichnisgröße verlassen.
quelle
-A
muss die Option hinzugefügt werdenls
.Verwenden:
Dabei ist <DIR> das Verzeichnis, das Sie überprüfen möchten.
Das '-c' gibt Ihnen Gesamtsummen-Daten an, die mit dem Teil 'grep total' des Befehls extrahiert werden, und die Anzahl in KB wird mit dem Befehl awk extrahiert.
Die einzige Einschränkung hier ist, wenn Sie ein Unterverzeichnis haben, das den Text "total" enthält, wird es ebenfalls ausgespuckt.
quelle