Wie erhalte ich die Größe eines Linux-oder Mac OS X-Verzeichnisses über die Befehlszeile? [doppelt]

Diese Frage hat hier bereits Antworten: Linux-Dienstprogramm zum Auffinden der größten Dateien / Verzeichnisse [geschlossen] (16 Antworten) Geschlossen vor 5 Jahren.

Welchen Befehl verwende ich, um die Größe aller Dateien (rekursiv) in einem Linux-oder Mac OS X-Verzeichnis zu ermitteln?

Author: Journeyman Geek, 2009-08-13

5 answers

Die BSD-Version von du, die in OS X verwendet wird, meldet Größe mit 512-Byte-Blöcken - die Größen werden im Wesentlichen auf den nächsten 512-Byte-Wert aufgerundet. Dies teilt Ihnen den Speicherplatz auf der Festplatte mit, der größer als die Datenmenge ist. Wenn Sie viele kleine Dateien haben, kann der Unterschied groß sein.

Hier ist ein Beispiel.

Dies ist der Wert mit regulären du. Es ist in 512-byte-Blöcken:

$ du -s
248   .

Das Flag -h ergibt eine besser lesbare Zahl in Kilobyte. Wie erwartet ist es die Hälfte der 512-Byte-Blöcke:

$ du -hs
124K  .

Schließlich können Sie find und awk, um die Summe der tatsächlichen Bytes in den Dateien zu erhalten. Dies ist etwas langsam, aber es funktioniert:

$ find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
60527

Dieser Wert stimmt genau mit der Zahl überein, die im Finder-Fenster Get Info gemeldet wird. (Es gibt keine seltsamen Gabeln oder xattrs in diesem Satz von Dateien.) Ist er deutlich kleiner als der gemeldete Wert von du.

So funktioniert es: Es erhält eine Liste aller Dateien und übergibt sie an ls -l; dann awk wird verwendet, um die Bytes zu zählen. Das Flag -type f ist vorhanden, sodass nur Dateien (und nicht Verzeichnisse) an ls gesendet werden. Ohne dieses Flag werden auch Verzeichnisnamen an ls gesendet, und jede Datei wird zweimal aufgeführt : einmal als einzelne Datei und einmal als Element im Verzeichnis.

Die GNU-Version von du kann Werte in tatsächlichen Bytes anstelle von Blöcken angeben. Es ist bedauerlich, dass die BSD-Version von du nicht so flexibel ist.

 87
Author: wch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-03-18 05:54:47

Zeigt die Größe einer einzelnen Datei an

du -h path_to_a_file

Zeigt die Größe des Inhalts eines Verzeichnisses, jedes Unterverzeichnisses und jede einzelne Datei an:

du -h path_to_a_directory

Zeigt die Größe des Inhalts eines Verzeichnisses an:

du -sh path_to_a_directory

 76
Author: Daryl Spitzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-06-27 02:25:30

Du - teilt der - Datenträgerverwendung nicht die - Dateigröße mit.

find . -type f -print0 | xargs -0 stat -f%z | awk '{b+=$1} END {print b}'

Über Terminal-Code (im auf osx 10.6) bietet für mich das beste Ergebnis und ist waaay schneller als " finden ... -exec"

Eine schnelle benchmark -

time find . -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}'
4744010970

real    0m0.086s
user    0m0.029s
sys 0m0.073s

time find . -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum}'
4744010970

real    0m18.515s
user    0m2.929s
sys 0m9.339s
 10
Author: Acid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-11-11 22:38:46

Sie können du -ah . verwenden, das die Größe aller Dateien und Verzeichnisse rekursiv anzeigt.

Dies kann mit sort kombiniert werden, sodass Sie die 20 größten Verzeichnisse im aktuellen Ordner sehen:

du -ah . | sort -rh | head -20

Hinweis: Die Option -h für sort ist unter OSX/BSD nicht verfügbar, daher müssen Sie sort von coreutils installieren (z. B. über brew) und den Bin-Pfad auf PATH anwenden, z. B.

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" # Add a "gnubin" for coreutils.

Ansonsten verwenden:

du -a . | sort -rn | head -20
 9
Author: kenorb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-03-05 14:03:07

I kombiniert alle Ihre approuches und kombiniert Sie mit eine menschenlesbare Ausgabe das Ergebnis ist:

#!/bin/sh
find $1 -type f -print0 | xargs -0 stat -f'%z' | awk '{b+=$1} END {print b}' | awk '{ sum=$1 ; hum[1024**3]="Gb";hum[1024**2]="Mb";hum[1024]="Kb"; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) { printf "%.2f %s\n",sum/x,hum[x];break } }}'

Link zum Kern: https://gist.github.com/mlegenhausen/9365461

 2
Author: malte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-03-05 11:30:06