Viele neue Dateien finden täglich den Weg auf Ihren Rechner. Fsniper nimmt die Neuankömmlinge in Empfang und verarbeitet sie nach Ihren Regeln weiter.
Fsniper [1] überwacht von Ihnen definierte Verzeichnisse und reagiert auf neue und veränderte Dateien in diesen Ordnern. Wie die Reaktion im Detail aussieht, bestimmen Sie – ob ein kurzes Kommando oder ein längeres und kompliziertes Shellskript die Arbeit aufnimmt, der Fantasie sind hier (fast) keine Grenzen gesetzt.
Fsniper bearbeitet die Dateien anhand bestimmter Regeln, die Sie aufstellen. Wahlweise reagiert das Tool auf MIME-Typen (z. B. audio/mpeg für MP3s oder image/jpeg für JPEG-Dateien), Shell-Wildcards oder reguläre Ausdrücke [2]. Auch eine Kombination ist möglich.
Installation
Auf der Projekthomepage [1] liegt der Fsniper-Quellcode als Tar-Archiv zum Download bereit. Bevor Sie das Programm aus dem Quellcode kompilieren und installieren, stellen Sie sicher, dass die benötigten Entwicklerwerkzeuge [3] installiert sind. Danach entpacken Sie das Fsniper-Archiv und führen den üblichen Dreischritt aus. Wer lieber fertige Pakete auf dem eigenen System einspielt, findet unter [4] und [5] Artikel, die den Bau von Debian- und RPM-Paketen ausführlich erklären.
Aufgepasst!
Als Dreh- und Angelpunkt fungiert Fsnipers Konfigurationsdatei im versteckten Ordner .config in Ihrem Home-Verzeichnis. Die Datei ~/.config/fsniper/config legen Sie vor dem ersten Aufruf von Hand an. Als Vorlage dazu kopieren Sie die Datei example.conf aus dem Quellcode-Ordner und passen diese an.
Die Einrichtungsdatei enthält mehrere ineinander geschachtelte Blöcke. Ganz oben steht die Anweisung watch; eine öffnende und eine schließende geschweifte Klammer begrenzen diesen äußeren Block. In diesem dürfen nun weitere Blöcke für zu überwachende Verzeichnisse folgen; auch diese begrenzen Sie durch geschweifte Klammern. Die Anweisung
watch {
~/downloads {
*.pdf {
handler = lp %%
}
}
}
beispielsweise veranlasst Fsniper dazu, den Ordner downloads im Home-Verzeichnis zu überwachen. Dort landende PDF-Dateien schickt Fsniper über das Kommando lp an den Standarddrucker. %% steht für den Dateinamen mit voller Pfadangabe. Um zusätzlich Postscript-Dateien zu verarbeiten, ist keine neue Anweisung nötig. Mit einem regulären Ausdruck erwischen Sie direkt beide Dateitypen:
…
/\.(pdf|ps)$/ { …
Reguläre Ausdrücke schließen Sie in zwei Schrägstriche ein, und vor den Punkt stellen Sie einen Backslash, damit er nicht ausgewertet wird. In den runden Klammern platzieren Sie die beiden Dateiendungen, das Dollarzeichen steht für das Zeilenende.
Wie erwähnt, reagiert Fsniper auch auf Angabe von MIME-Typen. Die zweite Anweisungsblock in Listing 1 wartet auf Torrent-Dateien. Auf diese reagiert Fsniper unter Zuhilfenahme von Zenity [6] mit einer Ja/Nein-Frage an den Benutzer: Klickt dieser Abbrechen, passiert nichts weiter. Ein Klick auf OK hingegen schiebt die Datei in den Ordner ~/torrents. Dort nimmt sie dann ein Bittorrent-Client in Empfang und startet den Datentransfer. Die Schreibweise %f im Text für das Dialogfenster sorgt im Gegensatz zu %% dafür, dass nicht der volle Pfad, sondern nur der Dateiname erscheint (Abbildung 1).
TIPP
Fsniper überwacht in der Voreinstellung keine Unterverzeichnisse der angegebenen Ordner. Es ist möglich, dieses Feature durch die Anweisung recurse = true nach der ersten öffnenden Klammer zu aktivieren (siehe Listing 1).
Beachten Sie beim Erstellen der Konfigurationsdatei, dass die Fsniper auf die Reihenfolge der Anweisungen Wert legt. Er arbeitet sie sequenziell von oben nach unten ab. Für ein Verzeichnis können Sie verschiedene Regeln definieren, die dann in Blöcken untereinander stehen.
Start und Stopp
Sie starten Fsniper über den gleichnamigen Befehl aus einem Terminal oder Schnellstarter ([Alt]+[F2]) heraus. Nach jeder Änderung der Konfiguration müssen Sie das Tool beenden — etwa mit killall fsniper – und neu aktivieren.
Fsniper führt in der Datei ~/.config/fsniper/log ein recht knapp gehaltenes Protokoll. Um etwas ausführlichere Infos zu erhalten, starten Sie Fsniper mit der Aufrufoption --verbose angeben. Das Logfile beobachten Sie beispielsweise mit tail -f auf der Kommandozeile. Über den Parameter --log-to-stdout weisen Sie Fsniper hingegen an, das Protokoll direkt ins Terminal zu schreiben.
Unendliche Möglichkeiten …
Fsniper lässt sich in zahlreichen Szenarien nutzbringend einsetzen. Teilen Sie etwa im heimischen Netzwerk einen Ordner mit Anderen, lassen Sie Fsniper beispielsweise alle ankommenden Audiodateien dorthin verschieben (Listing 1, letzter Anweisungsblock) und geben so neue Musik direkt frei. Regeln, die beispielsweise Rsync oder Scp zum Transfer auf entfernte Rechner verwenden, können Sie eine Sonderbehandlung zukommen lassen.
Fsnipers handler kann mit Verzögerungen umgehen und so unerledigte Datentransfers (etwa, weil der entfernte Rechner nicht erreichbar ist) wieder und wieder anstoßen. Dazu schreiben Sie vor den ersten Block (watch) zwei Zeilen, die regeln, wie viele Sekunden Fsniper bis zum nächsten Versuch wartet und wie oft er probiert, seine Anweisungen auszuführen:
delay_time = 300 delay_repeats = 10
Eine spezielle Behandlung benötigen auch Downloads, die Sie mit Firefox vornehmen. Der Browser legt nämlich temporäre Dateien mit der Endung .part an, den tatsächlichen Dateinamen setzt er erst nach Abschluss des Downloads. Im Quellcode-Verzeichnis von Fsniper finden Sie den Ordner contrib, der ein Skript mit einer möglichen Lösung für dieses Problem enthält.
# Beispielkonfiguration für Fsniper
watch {
# beobachte '~/downloads/drucken'
~/downloads/drucken {
# beziehe Unterverzeichnisse mit ein
recurse = true
# schaue nach Dateien des Typs '.pdf' und '.ps'
/\.(pdf|ps)$/ {
# schicke Datei mit vollem Pfadnamen über
# 'lp' an Standarddrucker:
handler = lp %%
}
}
# beobachte '~/downloads/torrents'
~/downloads/torrents {
# schaue nach Torrent-Dateien (MIME-Typ)
application/x-bittorrent {
# Abfragedialog: 'ja' = Datei nach '~/torrents'
# 'nein' = es passiert nichts
handler = if zenity --text "Neue Torrent-Datei (%f) gefunden. Zum Torrent-Verzeichnis hinzufügen?" --question; then mv %% ~/torrents; fi
}
}
~/downloads/musik {
recurse = true
# MIME-Typ: alle Audiodateiformate
audio/* {
# verschiebe Datei nach '/home/shares'
handler = mv %% /home/shares
}
}
}
Glossar
-
MIME
-
Multipurpose Internet Mail Extensions. Ursprünglich als Erweiterung für Mailclients entwickelt. Inzwischen verwenden Betriebssysteme die MIME-Typen, um Dateien bestimmten Programmen zuzuordnen.
[1] Fsniper herunterladen: http://projects.l3ib.org/trac/fsniper
[2] Regulären Ausdrücke: Martin Möller, “Strukturierte Suche”, LinuxUser 08/2005, S. 90, http://www.linux-user.de/ausgabe/2005/08/090-regex/
[3] Programme selbst kompilieren: Andreas Kneib, “Auf zu den Quellen”, LinuxUser 07/2005, S. 86, http://www.linux-user.de/ausgabe/2005/07/086-kompilieren/
[4] Debian-Pakete selbst bauen: Carsten Schnober, “Wie am Schnürchen”, LinuxUser 02/2008, S. 88, http://www.linux-user.de/ausgabe/2008/02/088/
[5] RPM-Pakete erstellen: Tim Schürmann, “Korrekt verstaut”, LinuxUser 07/2006, S. 52, http://www.linux-user.de/ausgabe/2006/07/052-rpm/
[6] Zenity und KDialog: Kristian Kißling, “Klacker, Klacker, Klick, Klick”, LinuxUser 06/2008, S. 36, http://www.linux-user.de/ausgabe/2008/06/036/






