Füllstandsanzeiger für Festplatten

Das Perl-Script du_tree.pl wurde ursprünglich zu dem Zweck gebaut, eine Anzeige ähnlich wie beim Linux-Programm tree (ist z. B. bei SuSE oder Debian Bestandteil der Distribution) zu liefern, aber zusätzlich die Größe des Verzeichnis wie in du -s anzuzeigen. Mittlerweile kann es wesentlich mehr, aber das steht in der Programmhilfe. 2004 ist eine kleine GUI, geschrieben in Tcl/Tk dazugekommen, weiter unten könnt Ihr einen Screenshot bewundern. Die Oberfläche ist ein reiner Wrapper, der das Zusammenklicken der Optionen erlaubt und das Ergebnis darstellt. Die eigentliche Arbeit macht immer noch das Perl-Script. Anfang 2008 habe ich auch endlich die I18N (deutsch und englisch) fertiggekriegt.

Ich habe das Script unter SuSE Linux 8.0 / 9.1 und Debian 3.0 mit Perl 5.6.1 / 5.8.3 getestet. du_tree steht unter der GNU General Public License.

Zur Funktion einige grundsätzliche Bemerkungen: Das Script wandert rekursiv durch den (per Kommandozeile vorgegebenen oder implizit gesetzten) Verzeichnisbaum und addiert in jedem Verzeichnis die Größen der regulären Dateien sowie der symbolischen Links. Hardlinks werden nur beim ersten Auftreten gezählt, wenn die Option -l gesetzt ist; per Default werden alle Dateien eingerechnet. Die daraus ermittelte Größe ist die Einzelgröße des Verzeichnis. Die Gesamtgröße beinhaltet zusätzlich die Größen der darunter liegenden Verzeichnisse.

Die Sortieroption -o depth (nach Tiefe im Verzeichnisbaum) ist vielleicht auf den ersten Blick etwas verwirrend, wenn mehrere Verzeichnisse angegeben wurden. Hier muss man beachten, dass diese Tiefe immer ausgehend vom Basis-Verzeichnis aus zählt. Wenn z. B.

  du_tree.pl -o depth /var/lib/apsfilter /var/adm

gestartet wurde, erscheinen sowohl /var/lib/apsfilter/bin als auch /var/adm/packages mit der Verzeichnistiefe 1.

Für die Programmhilfe (du_tree.pl -h), die grafische Oberfläche und die Hilfe zur GUI liegt jeweils eine Version in deutsch und englisch vor. Die UTF-8-Unterstützung sollte nun auch funktionieren. Ich habe mit den Spracheinstellungen de_DE.UTF-8, en_GB.UTF-8 und en_US.UTF-8 getestet.

Die Verteilung der Message-Kataloge ist ein wenig unübersichtlich, da Tcl und Perl unterschiedliche Mechanismen für das Finden dieser Dateien benutzen. Ich habe der Bequemlichkeit halber (MEINER Bequemlichkeit halber ;-) in den Programmen erstmal fest verdrahtet, dass das Basisverzeichnis für die Suche das Programmverzeichnis ist. Das hat einen unangenehmen Nebeneffekt: Wenn Ihr die Programme in einen Pfad stellt, wo Ihr sie ohne Pfadangabe aufrufen könnt, dann werden diese Verzeichnisse nicht gefunden. In diesem Fall müsst Ihr in den Code eingreifen und folgende Ersetzungen vornehmen (angenommen, der Installationspfad sei /usr/local/du_tree):

   # du_tree.pl Zeile 321
   bindtextdomain ("du_tree", "/usr/local/du_tree");
   # du_tree.tcl Zeile 27
   set cmdPath      "/usr/local/du_tree"

Wenn Ihr eigene Änderungen an den Quelltexten der Message-Kataloge übersetzen wollt:

  # fuer die Perl-Kataloge
  jan@jack:~/Development/du_tree/de> msgfmt -o LC_MESSAGES/du_tree.mo du_tree.po
  # fuer den deutschen Tcl-Katalog:
  jan@jack:~/Development/du_tree> msgfmt --tcl msg.po -l de -d msgs

Und wenn Ihr per perldoc eine Anzeige der Man-Page von du_tree.pl haben wollt, dann gibt es verschiedene Möglichkeiten:

  # 1.: in das Verzeichnis wechseln, in dem die POD-Dokumentation liegt
  jan@jack:~/Development/du_tree> cd de
  jan@jack:~/Development/du_tree/de> perldoc du_tree
  # 2.: die Variable PERLLIB auf das Verzeichnis erweitern
  jan@jack:~/Development> PERLLIB=/home/jan/Development/du_tree/de perldoc du_tree
  # 3.: die Datei du_tree in ein Verzeichnis packen, dass von perldoc durchsucht wird

Wie gesagt - alles noch ein wenig unfertig, aber (hoffentlich) halbwegs benutzbar.

Ein Screenshot der grafischen Oberfläche:

du_tree GUI

Voraussetzungen

Da es sich um ein Perl-Script handelt, ist natürlich ein installiertes Perl (in einer Version >= 5.60) Voraussetzung für die Funktion. Für die "alte" Version werden keine Perl-Module benötigt, die nicht zum Standard-Installationsumfang von Perl gehören. Für die grafische Oberfläche ist ein installiertes Tcl/Tk erforderlich, ich habe die Funktion unter Version 8.4 getestet. Für die Versionen ab 0.95 werden die gettext-Module benötigt.

Bis Version 0.94/0.22

Ich habe alle zum Paket gehörenden Dateien in ein .tgz-Archiv gepackt, dieses kann nach dem Download in einem beliebigen Verzeichnis entpackt werden (ich empfehle /usr/local/bin):

  jan@jack:~/du_tree> tar xzf du_tree.tgz
  # Nach dem Entpacken liegen 3 Dateien vor:
  du_tree.pl   # das Perl-Script
  du_tree.tcl  # die GUI
  du_tree.txt  # die GUI-Hilfedatei

Die beiden Scripte müssen ausführbar sein. Wenn nur das Perl-Script zum Einsatz kommen soll, können die anderen beiden Dateien ohne Probleme wieder gelöscht werden.

Ab Version 0.95/0.23

Das Archiv du_tree_095.tgz enthält jetzt ein paar mehr Dateien - auch ein Wink mit dem Zaunpfahl, dass ich endlich mal ein installierbares Paket bauen sollte ;-) Folgende Verzeichnisstruktur findet Ihr nach dem Auspacken vor (ich benutze mal den "Konkurrenten" tree, weil ich auch die Dateien zeigen will):

.
|-- de                     # deutsche Lokalisierung du_tree.pl
|   |-- LC_MESSAGES        # Text-Domain
|   |   `-- du_tree.mo     # uebersetzte Sprachdatei deutsch
|   |-- du_tree            # POD-Dokumentation deutsch
|   `-- du_tree.po         # Quelltext der .mo-Datei deutsch
|-- du_tree.pl             # das Perl-Script
|-- du_tree.tcl            # die tcl/tk-GUI
|-- en                     # englische Lokalisierung du_tree.pl
|   |-- LC_MESSAGES        # Text-Domain
|   |   `-- du_tree.mo     # uebersetzte Sprachdatei englisch
|   |-- du_tree            # POD-Dokumentation englisch
|   `-- du_tree.po         # Quelltext der .mo-Datei englisch
|-- msg.po                 # Quelltext der de.msg fuer du_tree.tcl
`-- msgs                   # Lokalisierung fuer du_tree.tcl
    |-- de.msg             # deutsche Uebersetzung fuer du_tree.tcl (englisch: Quelltext)
    |-- du_tree_de.txt     # deutsche Hilfedatei fuer du_tree.tcl
    `-- du_tree_en.txt     # englische Hilfedatei fuer du_tree.tcl

Alle Versionen

Eine Übersicht über die zur Verfügung stehenden Programmoptionen liefert der Aufruf:
du_tree.pl -h
Für die GUI ist eine Hilfe im Programm verfügbar, alternativ kann die Datei du_tree_de.txt in jedem Editor gelesen werden.

Wenn man an einem Tool schreibt, kommen einem laufend neue Ideen, was man noch besser, schicker oder anders machen könnte. Hier eine Liste der Ideen, die ich für du_tree im Moment vor mir her schiebe:


Datum Version Inhalt
2008-02-12 0.95/0.23 Version mit Lokalisierung (Deutsch und Englisch)
2008-02-11 0.94/0.22 Bugfixes: Das Default-Verhalten der Option -l entsprach leider immer noch nicht der Beschreibung, jetzt habe ich das nochmal links und rechts getestet und die Doku angepasst.
2004-08-28 0.93/0.21 Bugfixes: Das Default-Verhalten der Option -l entsprach nicht der Beschreibung, ist korrigiert. Die Defaultgröße der GUI wurde so geändert, dass auf einem 1024x768 Bildschirm oben und unten noch etwas Luft bleibt.
2004-07-17 0.91/0.2 Es gibt eine neue Option -x. Damit kann man Suchmuster für die Beschränkung auf einzelne Dateien angeben. Die Option kann mehrmals angegeben werden. Ist sie mindestens einmal gesetzt, werden nur noch Dateien (nicht Verzeichnisse!) bei der Berechnung berücksichtigt, die einem der angegebenen Suchmuster entsprechen.
Die GUI ist erweitert worden, die Optionen "Dateianzahl" (-c), "Verzeichnisse ausschließen" (-e) sowie "Suchmuster für Dateien" (-x) sind hinzugekommen. Die Anzahl der zu scannenden Verzeichnisse ist auf 10 erweitert (hauptsächlich aus ästhetischen Gründen ;-).
2004-05-03 0.9/0.1 Auf eine Anregung von Udo Neist hin habe ich folgende neue Optionen in du_tree.pl aufgenommen: Mit -c wird die Anzahl der Dateien im Verzeichnis (direkt und mit allen Unterverzeichnissen) in die Anzeige aufgenommen. Die Option -e erlaubt es, Verzeichnisse aus der Berechnung auszuschließen, die Verzeichnisnamen können als reguläre Ausdrücke angegeben werden.
2004-02-29 0.8/0.1 Das Script du_tree.tcl in der Version 0.1 ist als GUI-Wrapper hinzugekommen. Im Moment sieht der Code noch nicht so toll aus (ich arbeite mich erst wieder in Tcl/Tk ein), aber er tut fast immer das, was ich erwarte ;-).
2003-08-17 0.8 Das Default-Verhalten wurde so umgestellt, dass nur lokale Dateisysteme durchsucht werden. Um NFS-Mounts einzubeziehen,habe ich die Option -n (--nfs) hinzugefügt.
Für andere Betriebssysteme als Linux müssen unter Umständen der Pfad zum mount-Kommando und die Dateisystem-Typen der nfs-Mounts angepasst werden (Zeilen 46 und 47). Ich habe das Verhalten bisher nur unter Linux getestet. Es wäre nett, wenn ich dazu Feedback erhalten würde.
Bug-Fix: Im Default-Fall wurde nicht wie dokumentiert die Ansicht "tree" aktiviert, sondern "table".

Bei Verzeichnisgrößen über 4 GB liefert die Anzeige in Byte negative Zahlen, da ein numerischer Überlauf auftritt.
Im tcl/tk-Programm wirft die Benutzung der []-Operatoren einen Laufzeitfehler. Als Workaround können die beiden Zeichen mit einem Backslash entwertet werden (z. B. so: \[Hh\]it).

du_tree.tgz (Version 0.94/0.22)
du_tree_095.tgz (Version 0.95/0.23)