Wie erhalte ich die Größe eines Verzeichnisses in der Befehlszeile?

1068

Ich habe versucht, die Größe eines Verzeichnisses (mit Verzeichnissen und Unterverzeichnissen) mithilfe des lsBefehls with option zu ermitteln l. Es scheint für files ( ls -l file name) zu funktionieren , aber wenn ich versuche, die Größe eines Verzeichnisses zu ermitteln (zum Beispiel ls -l /home), erhalte ich nur 4096 Bytes, obwohl es insgesamt viel größer ist.

Abdul Al Hazred
quelle
18
1) Genau genommen können Sie nicht. Linux hat Verzeichnisse, keine Ordner. 2) Es gibt einen Unterschied zwischen der Größe eines Verzeichnisses (bei dem es sich um eine spezielle Datei handelt, die Inodes enthält, die auf andere Dateien verweisen) und der Größe des Inhalts dieses Verzeichnisses. Wie andere bereits ausgeführt haben, bietet der Befehl du das letztere an, und genau das möchten Sie anscheinend auch.
Jamesqf
11
Da Sie neu zu sein scheinen, möchte ich nur auf die hilfreiche -hOption hinweisen, die Sie der -lOption (dh ls -lh) hinzufügen können , um die Größe von Dateien zu erhalten, die in einer menschenfreundlichen Notation wie 1,1 MB anstelle von 1130301 ausgedruckt werden sollen "in dem du -hsbefehl, den @sam als antwort auf ihre frage nach verzeichnissen gab, heißt das auch" lesbar "und es erscheint auch, in df -hdem die lesbaren mengen des belegten und freien speichers auf der festplatte angegeben sind.
Msouth

Antworten:

1495

du -sh file_path

Erläuterung

  • duDer Befehl ( d isc u sage) schätzt den Speicherplatzbedarf für file_path
  • Die Optionen -shsind (von man du):

      -s, --summarize
             display only a total for each argument
    
      -h, --human-readable
             print sizes in human readable format (e.g., 1K 234M 2G)
    

    Um mehr als ein Verzeichnis zu überprüfen und die Gesamtsumme anzuzeigen, verwenden Sie du -sch:

      -c, --total
             produce a grand total
    
Sam
quelle
44
... es sei denn, Sie Hardlinks haben ;-) stackoverflow.com/questions/19951883/…
Rmano
15
Dies ist die Art der Antwort, die ich liebe <3 Es ist zusammengefasst und eine Art Einführung in den Befehl duund Sie geben auch die Möglichkeit, nach weiteren Details zu suchen man du...
Tipp für Unix-ähnliche Macher: Mach beim nächsten Mal einfach zuerst den Befehl "diskusage" oder vielleicht sogar "disk usage" ... dann die Verknüpfung ...;)
jave.web
Es funktioniert sehr gut mit find zB um die Menge an Speicherplatz in bestimmten Unterverzeichnissen im aktuellen Pfad zu zählen: $ find . -type d -name "node_modules" -prune -exec du -sh {} \;
Alex Glukhovtsev
321

Verwenden Sie einfach den duBefehl:

du -sh -- *

gibt Ihnen die kumulative Datenträgernutzung aller nicht ausgeblendeten Verzeichnisse, Dateien usw. im aktuellen Verzeichnis in einem für Menschen lesbaren Format an.

Mit dem dfBefehl können Sie den freien Speicherplatz im Dateisystem ermitteln, der das Verzeichnis enthält:

df -h .
Pazifist
quelle
4
du -sh *Startet das Auslösen von "Unbekannte Option" -Fehlern, wenn eine der Dateien in diesem Verzeichnis mit einem Bindestrich beginnt. Sicherer zu tundu -sh -- *
mpen
1
du -sh *zeigt keine Speichernutzung von versteckten Ordnern
Prashant Prabhakar Singh
4
du -sh -- * .*Dotfiles einbinden. Dies ist nützlich, um beispielsweise ein möglicherweise großes .gitVerzeichnis einzuschließen. Alternativ können Sie in zsh setopt globdotsstandardmäßig Punktedateien globalisieren.
Cbarrick
1
Was macht der --? Ich weiß, dass es für Shell -Built-Ins gilt , um Optionsargumente zu beenden, aber es duist kein Built -In, und ich sehe diese Verwendung nicht dokumentiert für du: linux.die.net/man/1/du
flow2k
Manchmal werden Sie hinzufügen möchten -b( --apparent-size)
elig
196

duist dein Freund. Wenn Sie nur die Gesamtgröße eines Verzeichnisses wissen möchten, springen Sie hinein und führen Sie Folgendes aus:

du -hs

Wenn Sie auch wissen möchten, welche Unterordner wie viel Speicherplatz beanspruchen ?! Sie können diesen Befehl folgendermaßen erweitern:

du -h --max-depth=1 | sort -hr

Dadurch erhalten Sie die Größe aller Unterordner (Ebene 1). Die Ausgabe wird sortiert (größter Ordner oben).

Chrispie
quelle
Auf einigen (vielleicht älteren?) Linux-Versionen scheint sort keinen h-Schalter zu haben, und daher ist der nächstbeste Befehl, den ich finden konnte: du -c --max-depth = 1 | sort -rn
richhallstoke
@richhallstoke, wenn Sie ncdudie Dateien verwenden, werden standardmäßig nach absteigender Größe sortiert.
Armfoot
3
+1 für die "| sort -hr"
afranques
67

duDie Verwendung kann kompliziert sein, da anscheinend 100 Argumente übergeben werden müssen, um eine anständige Ausgabe zu erhalten. Das Herausfinden der Größe versteckter Ordner ist noch schwieriger.

Machen Sie Ihr Leben einfach und nutzen Siencdu .

ncdu

Sie erhalten pro Ordner Zusammenfassungen, die einfach zu durchsuchen sind.

Teque5
quelle
9
Dies sollte die richtige Antwort sein, zumindest für diejenigen, die Software auf dem System installieren können. Leider glaube ich nicht, dass die meisten Leute weit genug nach unten scrollen werden, um dies zu sehen.
DavidR
@ RickyNotaro-Garcia Nein, das ignoriert versteckte Objekte und hängt an großen Verzeichnissen. Es ist möglich, dass es eine OK-Lösung mit einem Dutzend Rohren gibt, aber warum sollten Sie Ihr Leben verschwenden?
Teque5
@ RickyNotaro-Garcia Lies meinen ganzen Kommentar: Dein Versuch ignoriert versteckte Objekte und hängt an großen Verzeichnissen.
Teque5
2
ncduist toll, ich suche immer nach diesem Befehl, wenn vergessen. Es ist schnell, einfach zu navigieren und erleichtert das Auffinden großer Ordner. Zu Ihrer Information, es ist auch für MacOS und wahrscheinlich für alle Linux-Maschinen verfügbar.
Lukas
..und Sie können Ordner direkt löschen, ncduindem Sie die dTaste drücken
ccpizza
32

Andere haben es bereits erwähnt du, aber ich möchte auch Ncdu erwähnen - eine Ncurses-Version von Ncdu, die duInteraktivität bietet: Sie können die Verzeichnishierarchie direkt untersuchen und die Größe von Unterverzeichnissen anzeigen.

Tblue
quelle
26

Der duBefehl zeigt die Festplattennutzung der Datei an.

Die -hOption zeigt Ergebnisse in lesbarer Form an (z. B. 4k, 5M, 3G).

du -h (file name)
jackotonye
quelle
22

In allen obigen Beispielen wird die Größe der Daten auf der Festplatte angegeben (dh der von einer bestimmten Datei belegte Speicherplatz, der normalerweise größer als die tatsächliche Dateigröße ist). In einigen Situationen erhalten Sie keinen genauen Bericht, wenn die Daten nicht tatsächlich auf diesem Datenträger gespeichert sind und nur Inode-Verweise vorhanden sind.

In Ihrem Beispiel haben Sie ls -l für eine einzelne Datei verwendet, wodurch die tatsächliche Größe der Datei zurückgegeben wird, NICHT ihre Größe auf der Festplatte.

Wenn Sie die tatsächlichen Dateigrößen ermitteln möchten, fügen Sie du die Option -b hinzu.

du -csbh .
Andy Foster
quelle
Ja. Ich verwende SDFS, das die Dateien komprimiert und dedupt, sodass ich nicht herausfinden konnte, warum es so niedrige Zahlen meldet. Die tatsächliche Größe der Dateien mit ls finden Sie unter: du -b
Ryan Shillington
15

persönlich halte ich das für das beste, wenn du es nicht nutzen willst ncdu

# du -sh ./*
ConnerMan
quelle
14
df -h .; du -sh -- * | sort -hr

Hier sehen Sie, wie viel Speicherplatz Sie auf dem aktuellen Laufwerk noch haben und wie viel jede Datei / jedes Verzeichnis belegt. z.B,

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       206G  167G   29G  86% /
115M    node_modules
2.1M    examples
68K     src
4.0K    webpack.config.js
4.0K    README.md
4.0K    package.json
mpen
quelle
Zu Ihrer Information, es scheint die Größe der Festplatte zu melden. Das heißt, es wird wahrscheinlich auf die nächsten 4 KB aufgefüllt.
15.
9

Alle Dateien im aktuellen Verzeichnis rekursiv finden und ihre Größe zusammenfassen:

find -type f -print0 | xargs -0 stat --print='%s\n' | awk '{total+=$1} END {print total}'
Leon Chang
quelle
Ich würde -not -type dnicht nur die Größe von normalen Dateien ( -type f) summieren, sondern auch die Größe von symbolischen Links und so weiter.
anton_rh
Dies ist großartig, da Sie nicht den zum Speichern der Dateien erforderlichen Overhead erhalten, sondern nur die Größe der Dateien selbst.
bballdave025
9

Hier ist eine Funktion für Ihre .bash_aliases

# du with mount exclude and sort
function dusort () {
    DIR=$(echo $1 | sed 's#\/$##')
    du -scxh $(mount | awk '{print $3}' | sort | uniq \
     | sed 's#/# --  exclude=/#') $DIR/* | sort -h
}

Beispielausgabe:

$ dusort /
...
0       /mnt  
0       /sbin
0       /srv
4,0K    /tmp
728K    /home
23M     /etc
169M    /boot  
528M    /root
1,4G    /usr
3,3G    /var
4,3G    /opt
9,6G    total

für subdirs:

$ dusort .
$ dusort /var/log/
feldversuch
quelle
7

Eine weitere Variante:

du -h --max-dep=1
0x8BADF00D
quelle
6

Beachten Sie, dudass der von einem Verzeichnis belegte Speicherplatz auf dem Datenträger in der Regel größer ist als die Gesamtgröße aller Dateien im Verzeichnis, da dudie Größe aller auf dem Datenträger gespeicherten Zusatzinformationen berücksichtigt wird, um das Verzeichnis entsprechend zu organisieren mit Dateisystemformat.

Wenn das Dateisystem komprimierbar ist, wird dumöglicherweise eine noch geringere Anzahl als die Gesamtgröße aller Dateien ausgegeben, da Dateien möglicherweise vom Dateisystem intern komprimiert werden und daher weniger Speicherplatz auf dem Datenträger beanspruchen als nur nicht komprimierte Informationen. Gleiches gilt, wenn es spärliche Dateien gibt.

Wenn das Verzeichnis feste Verknüpfungen enthält, wird dumöglicherweise auch ein kleinerer Wert gedruckt, da mehrere verschiedene Dateien im Verzeichnis auf dieselben Daten auf dem Medium verweisen.

Um die Gesamtgröße aller Dateien im Verzeichnis zu ermitteln, kann der folgende einzeilige Shell-Ausdruck verwendet werden (unter der Annahme eines GNU-Systems):

find . ! -type d -print0 | xargs -r0 stat -c %s | paste -sd+ - | bc

oder noch kürzer:

find . ! -type d -printf '%s\n' | paste -sd+ - | bc

Es summiert einfach die Größe aller Nicht-Verzeichnisdateien im Verzeichnis (und seinen Unterverzeichnissen rekursiv) nacheinander. Beachten Sie, dass für Symlinks die Größe des Symlinks (nicht der Datei, auf die der Symlink verweist) angegeben wird.

anton_rh
quelle
5

Sie können verwenden

du -sh directory/

und

du -sh filename

um den von dem Ordner oder der Datei belegten Speicherplatz zu ermitteln.

df -h

zeigt die Datenträgerverwendung in einem für Menschen lesbaren Format an.

Es gibt auch ein GUI-basiertes Programm namens Disk Usage Analyzer.

arupgsh
quelle
5

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