Ubuntu 16.04 Xenial Xerus
Ubuntu 12.04 Precise Pangolin
Fsniper 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.
Fsniper kann direkt aus den Paketquellen über folgendes Paket installiert [1] werden:
fsniper (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install fsniper
sudo aptitude install fsniper
Alternativ kann das Programm als Quellcode direkt von der Projektwebseite 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.
mkdir -p ~/.config/fsniper cp /usr/share/doc/fsniper/examples/example.conf ~/.config/fsniper/config
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:
zu überwachender Ordner
Optionen
Suchmuster / MIME-Typ
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 } } }
Fsniper kann nach drei verschiedenen Arten Dateien filtern.
Fsniper kann nach 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:
file -ib DATEI
Generelle Muster im Dateinamen wie *.txt oder *.html werden ebenfalls gefunden.
Dies beinhaltet beliebig viele Unterscheidungen, wie z.B. /\.(pdf|ps)$/
.
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.
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 Skript firefox-handler.sh wird unter ~/.config/fsniper/ abgelegt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/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 |
Fsniper kann als Prozess im Vordergrund oder als Dienst gestartet werden. Zum Testen der Konfigurationsdatei bietet sich der Aufruf mittels
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
Diese Revision wurde am 4. November 2016 08:04 von DerSelteneMann erstellt.