Montag, 13. Februar 2012

yab - Größe eines Verzeichnisses ermitteln

Analog zum Ermitteln der Größe einer Datei, aus meinem letzten yab- Beitrag, möchte ich Euch heute zeigen wie man mit ein paar kleinen Änderungen am Quelltext auch die Größe eines Verzeichnisses herausfinden kann. Dieses Beispiel lehnt sich an "Beispiel 2" an und nutzt ebenfalls den Befehl "awk", wie bereits unter "Haiku - Text- Ausgaben unter Kontrolle" beschrieben. Damit und mit den entsprechenden Parametern für den "ls"- Befehl ist das Ganze relativ einfach umgesetzt.



export sub _GetDirSize(Path$)

  // Variablen definieren
  local SystemInput$
  local Result
  local AWK$

  dim Position$(1)
  AWK$ = " | awk '{sum+=$5}; END {print sum}'"

  // prüfen ob das angegebene Verzeichnis existiert
  if (not system("test -d " + Path$)) then

    // den Befehl "LS -l -R -A | awk '{sum+=$5}; END {print sum}' ausführen
    // und Ausgabe in SystemInput$ speichern
    SystemInput$ = system$("ls -l -R -A " + Path$ + AWK$)

    // in diesem Fall enthält SystemInput$ bereits den richtigen Wert
    Result = val(trim$(SystemInput$))

  else

    // wenn Datei nicht gefunden, Ergebnis = 0 
    Result = 0

  endif

  // Ergebnis zurückliefern
  return Result

end sub


Als erstes "bauen" wir den AWK$ zusammen, denn der Befehl "awk" nimmt uns an dieser Stelle prinzipiell die gesamte Arbeit ab. Er sorgt für das zusammenzählen der einzelnen Datei- Größen "{sum+=$5}" (wir erinnern uns, $5 steht für die 5. Position, also die Datei- Größe, der Ausgabe bei "dir" bzw. "ls -l") und die Ausgabe der errechneten Summe "{print sum}".
Als nächstes prüfen wir "test -d" ob es sich bei dem übergebenen Pfad auch wirklich um ein Verzeichnis handelt und wenn ja, lassen wir den Befehlen ihren freien Lauf. Sollte der Pfad nicht vorhanden oder kein Verzeichnis sein, wird "0" zurückgegeben.


(getestet mit Haiku R1 Alpha 3 und yab 1.5)

Keine Kommentare:

Kommentar veröffentlichen