Ermitteln Sie die ungefähre Größe des Verzeichnisses (rekursiv einschließlich aller Dateien und Unterverzeichnisse).

10

Gibt es eine Möglichkeit, schnell eine genaue Größe für ein Verzeichnis zu erhalten (einschließlich rekursiv aller Unterverzeichnisse)? Ich möchte nicht die Größe der Unterverzeichnisse, ich meine nur, dass sie rekursiv in die gemeldete Gesamtgröße einbezogen werden sollten.

Gelingt dies nicht, um eine ungefähre Größe zu erhalten? Ich denke, etwas in dfdieser Richtung führt zu einer schnellen Antwort für das gesamte Dateisystem, diesmal jedoch für ein bestimmtes Verzeichnis (und seine Unterverzeichnisse).

Lösungen, die verwendet werden, duscheinen ewig zu dauern, wenn ein Verzeichnis Tausende von Unterverzeichnissen enthält.

Marcus Junius Brutus
quelle
Die Verwendung duist die einzige Methode, die mir bekannt ist. Das Problem ist, dass die Daten über die gesamte Hierarchie verteilt sind, sodass sie von einem Tool erfasst werden müssen, um die Anzahl zu ermitteln.
slm

Antworten:

15

Ich finde das sehr nützlich.

du -sm Directory

oder um eine Aufschlüsselung der internen Verzeichnisse zu erhalten

du -sm Directory/*

und dann mit einer Sorte, wenn es viele Unterverzeichnisse gibt

du -sm Directory/* | sort -n 

Der Grund, warum ich die Option -m verwende, besteht darin, sicherzustellen, dass ich eine Megabyte-Ausgabe erhalte. Ich finde, dass dies für mich einfacher visuell zu vergleichen ist (wenn ich keine Mischung von Einheiten erhalte, z. B. 999 KB und 1 MB mit 999000 MB und 1000000 MB vergleichen), besteht der zusätzliche Vorteil darin, dass Sie die Ausgabe in Sortierung übergeben können.

Stellen Sie alles in den Hintergrund und leiten Sie die Ausgabe um. Es wird einige Zeit dauern, egal welche Methode Sie verwenden. Es ist eine Durchquerung vieler Dateien, die Zeit in Anspruch nehmen wird.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Beachten Sie die umgekehrte Sortierung, damit die großen am Anfang stehen. Fügen Sie dies hinzu, um alle n Minuten einen Cron-Lauf durchzuführen.

Mit einem Alias-Ducache haben Sie dann eine ziemlich aktuelle Verzeichnisverwendung.

export alias ducache='head -n 15 ~/cacheDu.log'
X Tian
quelle
@X Tian siehe meinen Kommentar zu Glenn Jackmans Antwort
Marcus Junius Brutus
Akzeptiert, deshalb benutze ich -m und sortiere
X Tian
3
Denken Sie daran shopt -s dotglob, sonst du -sm Directory/*werden versteckte Dateien / Verzeichnisse nicht gezählt.
Dmitry Grigoryev
@XTian sorry aber ich konnte nicht so einige befehle bitte helfen.
Maveň
Ich habe es von hier bekommen
Maveň
5
du -sh "$dir"

gibt Ihnen eine Zusammenfassung der Gesamtgröße in "menschlich" formatierten Ausgaben.


Da Sie nach einer Alternative gesucht haben du, habe ich es versucht find, aber es ist genau das gleiche:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .
Glenn Jackman
quelle
Danke, das ist mir bewusst, aber es dudauert viel zu lange, da es ein genaues Ergebnis liefert. Ich hatte auf ein Tool / einen Befehl gehofft, der eine schnelle und schmutzige ungefähre Antwort liefert.
Marcus Junius Brutus
Es gibt dfaber das funktioniert auf dem gesamten Dateisystem.
Glenn Jackman
1

Meine Antwort mag Ihnen vielleicht nicht gefallen, aber ich denke, der beste Weg, das zu tun, was Sie wollen, besteht darin, die "du -s" regelmäßig mit cron im Hintergrund auszuführen und das Ergebnis in einer Datei zu speichern. Wenn Sie dann einen ungefähren Wert wünschen, verwenden Sie den Wert aus der Datei. Sie können entscheiden, wie oft Sie das du ausführen möchten. Ich sehe keinen schnelleren Weg, um den Wert zu erhalten. Der Befehl du ist effizient für das, was er tut.

Die einzige andere Möglichkeit, dies sehr schnell zu tun, besteht darin, ein Dateisystem für das Verzeichnis zu erstellen. Dann erhalten Sie von df sehr schnell die gewünschte Antwort.

Wenn es schneller ist, alles im Dateisystem außer Ihrem Verzeichnis zu kennen, können Sie df für das Dateisystem ausführen, für alles andere als Ihr Verzeichnis und subtrahieren.

Robert Jacobs
quelle
0

Es entspricht nicht genau Ihren Anforderungen (kein einzeiliger Druck), ist aber einfacher als andere Lösungen:

du -a -h | sort -hr | head -2

Dieser Befehl gibt Ihnen die Größe des Verzeichnisses und des Unterverzeichnisses sowie die Größe der größten Datei oder des größten Unterverzeichnisses im aktuellen Verzeichnis an.

PS: Das head -2ist für den Fall, dass ein Unterverzeichnis den gesamten Platz des aktuellen Verzeichnisses einnimmt und vor dem aktuellen abgehört wird.

Nodulaire
quelle