![Wie kann man (nicht rekursiv) die Größe aller (sowohl versteckten als auch nicht versteckten) Ordner in einem Verzeichnis messen?](https://rvso.com/image/178466/Wie%20kann%20man%20(nicht%20rekursiv)%20die%20Gr%C3%B6%C3%9Fe%20aller%20(sowohl%20versteckten%20als%20auch%20nicht%20versteckten)%20Ordner%20in%20einem%20Verzeichnis%20messen%3F.png)
Ich habe ein übergeordnetes Verzeichnis somedir
mit zwei untergeordneten Verzeichnissen .hiddenDir
und notHidden
.
Ich möchte nicht rekursiv die Größen messen vonalleUnterverzeichnisse in somedir
.
Wie kann ich dies unter Unix tun?
Bild von dem, was ich will:
Fehlversuch:
Der folgende du
Befehl gibt nur die sichtbaren Verzeichnisse zurück:
du -sh *
Während
du -sh .*
gibt nur die versteckten Verzeichnisse zurück.
Wie kann ich die Größen vonalledie Verzeichnisse wie auf dem Bild?
Antwort1
Mit GNU du
:
du -hd1
(es meldet auch die Festplattennutzung, die .
sich aus der Summe der für die Unterverzeichnisse gemeldeten Festplattennutzungen und der der nicht in Verzeichnissen enthaltenen Dateien im aktuellen Verzeichnis ergibt).
Mit zsh
und jedem du
:
du -sk -- *(/D)
(in Kibibyte).
Obwohl die Festplattennutzung von Verzeichnissen auf der Tiefe 2
oder darunter und deren Inhalt nicht gemeldet wird, ist die Festplattennutzung dieser Verzeichnisse immer noch in der Festplattennutzung enthalten, die für die Verzeichnisse der obersten Ebene gemeldet wird (mit anderen Worten, es gibtIstRekursion).
Das ist eine der möglichen Bedeutungen desGrößeeines Verzeichnisses. Mit anderen Worten, das ist der Speicherplatz, der zurückgewonnen würde, wenn dieses Verzeichnis und sein Inhalt entfernt würden (vorausgesetzt, die Dateien haben keine Hardlinks außerhalb dieser Verzeichnisse und ihre Daten werden nicht (möglicherweise teilweise) in anderen Dateien außerhalb dieser Verzeichnisse referenziert). Beachten Sie, dass dies im Allgemeinen von der Summe der scheinbaren Größe der Dateien selbst (einschließlich Verzeichnisdateien) abweicht, wie von gemeldet ls -l
.
Antwort2
Du akzeptiert mehrere Argumente. Tatsächlich werden die *'s von Ihrer Shell erweitert, bevor sie an du übergeben werden. Das ist also alles, was Sie tun müssen.
du -sh * .??*
Achtung: Dabei werden Dateien oder Verzeichnisse übersehen, die mit .
und einem einzelnen Zeichen benannt sind – zum Beispiel ein Verzeichnis namens .a
.
.??*
.
wird zum Überspringen von und verwendet ..
, wobei es sich um Links zum aktuellen und übergeordneten Verzeichnis handelt.