Einige Versionen von du
unterstützen das Argument --apparent-size
um die scheinbare Größe anstelle der Festplattennutzung anzuzeigen. Ihr Befehl wäre also:
du -hs --apparent-size
Aus den Manpages für du, die in Ubuntu 12.04 LTS enthalten sind:
--apparent-size
print apparent sizes, rather than disk usage; although the
apparent size is usually smaller, it may be larger due to holes
in (`sparse') files, internal fragmentation, indirect blocks,
and the like
Hier ist ein Skript, das eine für Menschen lesbare Verzeichnisgröße mit Unix-Standardwerkzeugen (POSIX) anzeigt.
#!/bin/sh
find ${1:-.} -type f -exec ls -lnq {} \+ | awk '
BEGIN {sum=0} # initialization for clarity and safety
function pp() {
u="+Ki+Mi+Gi+Ti+Pi+Ei";
split(u,unit,"+");
v=sum;
for(i=1;i<7;i++) {
if(v<1024) break;
v/=1024;
}
printf("%.3f %sB\n", v, unit[i]);
}
{sum+=$5}
END{pp()}'
zB:
$ ds ~
72.891 GiB
Angenommen, Sie haben du
Dieser Befehl von GNU Coreutils sollte die scheinbare Gesamtgröße einer beliebigen Anzahl regulärer Dateien in einem Verzeichnis ohne beliebige Begrenzung der Anzahl der Dateien berechnen:
find . -type f -print0 | du -scb --files0-from=- | tail -n 1
Fügen Sie die -l
hinzu Option zu du
wenn darin einige Hardlink-Dateien enthalten sind und Sie jeden Hardlink separat zählen möchten (standardmäßig du
zählt mehrere Hardlinks nur einmal).
Der wichtigste Unterschied zum einfachen du -sb
ist das rekursive du
zählt auch die Größe von Verzeichnissen, die von verschiedenen Dateisystemen unterschiedlich gemeldet werden; um dies zu vermeiden, die find
Der Befehl wird verwendet, um nur reguläre Dateien an du
zu übergeben . Ein weiterer Unterschied besteht darin, dass Symlinks ignoriert werden (wenn sie gezählt werden sollen, wird die find
sollte angepasst werden).
Dieser Befehl verbraucht auch mehr Speicher als der einfache du -sb
, weil mit --files0-from=FILE
macht du
Geräte- und Inode-Nummern von allen speichern verarbeitete Dateien, im Gegensatz zum Standardverhalten, nur Dateien mit mehr als einem festen Link zu speichern. (Dies ist kein Problem, wenn -l
Option wird verwendet, um Hardlinks mehrfach zu zählen, da der einzige Grund zum Speichern von Geräte- und Inode-Nummern darin besteht, bereits verarbeitete Hardlink-Dateien zu überspringen.)
Wenn Sie eine menschenlesbare Darstellung der Gesamtgröße erhalten möchten, fügen Sie einfach den -h
hinzu Option (dies funktioniert, weil du
wird nur einmal aufgerufen und berechnet die Gesamtgröße selbst, im Gegensatz zu einigen anderen vorgeschlagenen Antworten):
find . -type f -print0 | du -scbh --files0-from=- | tail -n 1
oder (wenn Sie befürchten, dass einige Auswirkungen von -b
werden dann durch -h
überschrieben )
find . -type f -print0 | du -sc --apparent-size -h --files0-from=- | tail -n 1