[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Programme kompilieren: Pakete aus dem Quellcode erstellen] [:Paketinstallation_DEB: Ein einzelnes Paket installieren] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [http://files.minuslab.net/doc.html Fsniper] {en} ist ein Programm, um eines oder mehrere Verzeichnisse auf neue Dateien hin zu überwachen, um dann, abhängig vom Dateityp, bestimmte Anweisungen auszuführen. So lassen sich zum Beispiel Musikdateien und Bilder automatisch in die eingestellten Ordner verschieben, oder gespeicherte PDFs im Ordner an den Drucker senden. Die Möglichkeiten sind vielfältig. Fsniper wird aktiv, wenn eine Datei nach einem Schreibzugriff (Erstellung oder Änderung) geschlossen wird. = Installation = == Aus den offiziellen Paketquellen == Fsniper kann direkt aus den Paketquellen über folgendes Paket installiert [1] werden: {{{#!vorlage Paketinstallation fsniper, universe }}} Alternativ kann das Programm als Quellcode direkt von der [http://projects.l3ib.org/trac/fsniper Projektwebseite] {en} heruntergeladen werden und muss anschließend noch kompiliert[2] und installiert[3] werden. Damit Fsniper korrekt funktioniert, muss vor dem ersten Start eine gültige Konfigurationsdatei in '''~/.config/fsniper/config''' erstellt werden. Als Vorlage und erste Orientierung kann man die Beispielkonfiguration '''example.conf''' in '''/usr/share/doc/fsniper/examples/''' kopieren. {{{#!vorlage Befehl mkdir -p ~/.config/fsniper cp /usr/share/doc/fsniper/examples/example.conf ~/.config/fsniper/config }}} = Einrichtung = Die Konfigurations-Datei besteht aus mehreren verschachtelten Blöcken und ist von einem `watch`-Block umschlossen. In diesem Block dürfen nun weitere Blöcke für die einzelnen Dateitypen definiert werden. Diese Unterblöcke haben immer folgenden Aufbau: 1. zu überwachender Ordner 1. Optionen 1. Suchmuster / [:MIME-Typ:] 1. Anweisung ("handler") {{{ #Beispielkonfiguration: watch { # beobachte Verzeichnis ~/drop ~/drop { # trifft auf alle MIME-Typen zu, die mit image/ beginnen image/* { # %% wird ersetzt durch den Dateiname handler = echo Bild gefunden: %% } } # beobachte Verzeichnis ~/downloads/musik ~/downloads/musik { # Option: bezieht alle Unterverzeichnisse mit ein recurse = true audio/* { # verschiebt die Datei in den Musikordner handler = mv %% ~/Musik } } } }}} = Einstellungen = Fsniper kann nach drei verschiedenen Arten Dateien filtern. === MIME-Typen === Fsniper kann nach [:MIME-Typ:MIME-Typen] unterscheiden wie z.B. `image/png`, `text/plain` usw. Um zu überprüfen, welchen MIME-Typ eine Datei besitzt, kann man folgenden Befehl benutzen: {{{#!vorlage Befehl file -ib DATEI }}} === Shell Globs === Generelle Muster im Dateinamen wie '''*.txt''' oder '''*.html''' werden ebenfalls gefunden. === Reguläre Ausdrücke === Dies beinhaltet beliebig viele Unterscheidungen, wie z.B. `/\.(pdf|ps)$/ `. = Handler = Der Handler, welcher die gesetzten Anweisungen umsetzt, gibt je nach Ergebnis einen Wert zurück: * `0` bedeutet, dass der Handler die Operation erfolgreich ausgeführt hat * `2` bedeutet, dass der Handler mit dem Event prinzipiell umgehen kann, derzeit aber ein Problem besteht Jeder andere Rückgabewert bedeutet, dass der Handler mit der Anweisung nicht umgehen konnte. Das hat zur Folge, dass der nächste Handler (sofern vorhanden) ausprobiert wird. = Ausnahme Firefox-Downloads = Firefox erstellt am Anfang des Downloadvorgangs eine leere Datei mit dem Dateinamen sowie eine dazugehörige Datei mit der Erweiterung '''.part'''. Fsniper soll in aller Regel erst aktiv werden, wenn der Download vollständig abgeschlossen ist. Daher darf die Anweisung im Handler erst einen Befehl ausführen, wenn der Inhalt der '''.part'''-Datei in die Zieldatei geschrieben wird. Hierzu folgender Eintrag in die Konfigurationsdatei: {{{ watch { ~/Downloads { *.part { handler = echo ignoring file: %% } * { handler = ~/.config/fsniper/firefox-handler.sh %% handler = mv %% ~/Incoming #Hier der eigentliche Befehl } }}} Das referenzierte [http://code.l3ib.org/?p=fsniper.git;a=blob_plain;f=doc/doc.txt Skript] {en} '''firefox-handler.sh''' wird unter '''~/.config/fsniper/''' abgelegt: {{{#!code bash #!/bin/bash # Skript, das Aufrufe auf temporäre Firefox-Dateien verhindert args="$*" length=`expr length "$*"` size=`du "${args}" | awk '{print $1'}` # Wenn zur Datei eine Datei.part existiert und Firefox dies immer noch herunterlädt # wird die Datei ignoriert bis der Download abgeschlossen ist # und in die Zieldatei geschrieben wird. if [[ -e "${args}.part" && "$size" -eq "0" ]] then exit 0 fi exit 1 }}} = Benutzung = Fsniper kann als Prozess im Vordergrund oder als Dienst gestartet werden. Zum Testen der Konfigurationsdatei bietet sich der Aufruf mittels {{{#!vorlage Befehl fsniper --verbose }}} an. Der Programmablauf wird in der Datei '''~/.config/fsniper/log''' protokolliert. Zu beachten ist noch, dass nach jeder Konfigurationsänderung Fsniper beendet und nochmal neu gestartet werden muss. Für den regulären Betrieb von Fsniper benutzt man den Daemon-Modus von fsniper. Dazu wird der Fsniper-Daemon per [:Autostart:] zu Beginn der Sitzung gestartet. Hier der Inhalt der '''fsniper.desktop''' {{{ [Desktop Entry] Type=Application Name=Fsniper Exec=fsniper --daemon ~/.config/fsniper/config Hidden=false Icon=system-run StartupNotify=false Terminal=false }}} = Links = * [http://files.minuslab.net/doc.html Dokumentation] {en} * [http://code.l3ib.org/?p=fsniper.git Letzte Änderungen] {en} #tag: Netzwerk, Server, Büro, Kommunikation