Fsniper

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Pakete aus dem Quellcode erstellen

  3. Ein einzelnes Paket installieren

Inhaltsverzeichnis
  1. Installation
    1. Aus den offiziellen Paketquellen
  2. Einrichtung
  3. Einstellungen
  4. Handler
  5. Ausnahme Firefox-Downloads
  6. Benutzung
  7. Links

Wiki/Icons/terminal.png 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.

Installation

Aus den offiziellen Paketquellen

Fsniper kann direkt aus den Paketquellen über folgendes Paket installiert [1] werden:

Paketliste zum Kopieren:

sudo apt-get install fsniper 

Oder mit apturl installieren, Link: apt://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 

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

  2. Optionen

  3. Suchmuster / MIME-Typ

  4. 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-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 

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:

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 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

Benutzung

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