Ich habe am Wochenende etwas ausprobiert, das sehr nützlich sein kann.
Zunächst das Problem: ich habe für die Schule, an der meine Frau Lehrerin ist, eine Webseite gemacht. Anscheinend ist niemand im Kollegium willens, auch nur die Grundlagen der Pflege dieser Seite zu erlernen, so dass meine Frau von allen Seiten Fotos und Texte zum Einpflegen bekommt. Dabei ist sie auch völlig unbeleckt in Sachen Bildbearbeitung und Webdesign. Also bleiben z.B. Bearbeitungen von Bildern an mir hängen.
Ein typisches Beispiel ist die Batch-Anpassung der Bildgröße an das, was das Webseitentemplate erwartet. Dafür gibt es Tools, aber ich habe eine ganz einfache Lösung implementiert, die nicht einmal den Umgang mit so etwas benötigt.
Der Schlüssel zur Lösung liegt in einem Kerneldienst namens inotify. Dieser Dienst hat die Aufgabe, Änderungen am Dateisystem zu verkünden; mittels des Paketes inotify-tools erhält man einen Befehl inotifywait, der es möglich macht, innerhalb von Skripten auf solche Benachrichtigungen zu reagieren.
Folgendes Skript habe ich nun geschrieben und lasse es automatisch beim Start des Systems laufen:
#!/bin/bash
inotifywait -mq --format "%w%f" -e create /home/robin/webseitenbilder | while read file; do
convert -resize 400x400 $file $file
done
Dieses Skript schläft, bis inotify ihm mitteilt, dass in dem Verzeichnis /home/robin/webseitenbilder ein Ereignis der Art create stattgefunden hat, also eine Datei dort erstellt oder hin kopiert wurde. Wenn das geschieht, liefert inotifywait den Namen der Datei an den convert-Befehl aus dem imagemagick-Paket, der die Datei dann proportional korrekt in ein Quadrat der Größe 400x400 Pixel einpasst und somit verkleinert.
Das Ergebnis ist ein Verzeichnis, in das man Bilddateien nur hineinkopieren muss, und schon werden sie im Hintergrund auf die richtige Größe gebracht.
Natürlich kann man mit diesem Mechanismus noch eine Menge andere Sachen machen, z.B. kann man wichtige Dokumentenverzeichnisse auf Dateioperationen überwachen und bei jeder Änderung eine Echtzeit-Sicherung per copy-Befehl auf eine externe Platte durchführen. Oder man kann das gesamte Dateisystem überwachen und Veränderungen einer Installation mitprotokollieren.
Robin