GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhalte ich die tatsächliche Verzeichnisgröße (aus du)?

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

Linux
  1. Wie erhalte ich eine Anzahl von Dateien in einem Verzeichnis über die Befehlszeile?

  2. Linux – Wie kombiniere ich den Baum mit der Verzeichnisgröße?

  3. Wie erhalte ich programmgesteuert den freien Speicherplatz für ein Verzeichnis in Linux

  4. So erhalten Sie alle Dateien, die eine bestimmte Größe überschreiten, und löschen sie

  5. So erhalten Sie die Größe von tar.gz in (MB) Datei in Python

So zählen Sie Dateien im Verzeichnis in Linux

So holen Sie das Beste aus Qmmp 1.0 heraus

So ermitteln Sie die Größe eines Verzeichnisses in Linux

So ermitteln Sie die Gesamtgröße eines Verzeichnisses in Linux

So überprüfen Sie die Größe von Dateien und Verzeichnissen unter Linux

Wie finde ich die platzraubendsten Verzeichnisse oder Dateien heraus?