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