Hilfe zum Watch Directory-Skript

Hilfe zum Watch Directory-Skript

Zunächst muss ich anmerken, dass ich ein ziemlicher Neuling im Schreiben von Skripten bin, mich mit Ubuntu aber gut genug auskenne, sodass es mir nichts ausmacht, mir die Hände schmutzig zu machen ...

Ich habe ein kleines Skript, das eine einfache Verzeichnisüberwachung durchführt und wenn es eine neue Datei im Verzeichnis findet, diese Datei in ein anderes Verzeichnis kopiert. Das Skript, das ich verwende, sieht folgendermaßen aus:

#!/bin/sh
#
sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Abgeschlossen/ /media/abgeschlossen/

während [ 1 ]
Tun
  echo 'Verzeichnis überwachen: '$WATCHED_DIR 'für neue Dateien'
  während Datei=$(inotifywait -q -e create "$WATCHED_DIR" --format "%f")
  Tun
    echo 'Neue Datei zum Hochladen auf Moonback' $file
    notify-send -i "gtk-go-up" "Ordnerüberwachung vervollständigen" "Datei $file wird hochgeladen"

    #rsync kommt hierhin
    sudo rsync -av --omit-dir-times --delete --progress /home/sunmorgus/tempx/Abgeschlossen/ /media/abgeschlossen/

    notify-send -i "gtk-home" "Kompletter Ordnermonitor" "Datei hochgeladen."
  Erledigt
Erledigt

Es handelt sich um eine Modifikation eines Skripts, das ich hier gefunden habe:http://www.webupd8.org/2010/11/script-to-watch-folder-and-upload-new.html

Ich habe ein paar Fragen zum Skript. Zunächst einmal: Ist das die beste Methode für das, was ich versuche? Wie gesagt, es funktioniert gut, aber ich bin immer offen für neue Ideen. Hinweis: Das Zielverzeichnis ist eine SMB-Freigabe auf einem Windows 7-Computer.

Zweitens ... was wäre die beste Möglichkeit, dieses Skript beim Start auszuführen? Gerade bin ich in den Bildschirm „Startup Applications“ gegangen und habe einen neuen Datensatz hinzugefügt, der diese Zeile „gnome-terminal -e /script.sh“ ausführt, was funktioniert, aber nicht ideal erscheint. Ich habe versucht, das Skript zum Ordner init.d hinzuzufügen und update-rc.d auszuführen und das Skript zu /etc/rc.local hinzuzufügen, aber nichts davon hat funktioniert (ich habe keine Fehler erhalten, aber das Skript wurde nach einem Neustart nicht ausgeführt).

Und schließlich: Gibt es eine Möglichkeit, dieses Skript so zu ändern, dass es auch aus dem Ziel löscht, wenn es aus der Quelle gelöscht wird? Das Skript wird nur ausgeführt, wenn Dateien hinzugefügt, nicht gelöscht werden, und während der rsync-Teil aus dem Ziel löscht, wenn er aus der Quelle gelöscht wird, geschieht dies erst, wenn eine neue Datei hinzugefügt wird. (Hoffentlich ist dieser Absatz verständlich.)

Antwort1

Für Ihre Fragen...

  1. Das funktioniert einigermaßen gut. Wenn Sie es etwas ausgefallener haben möchten, schauen Sie sichFamilie.
  2. Fügen Sie es am Ende hinzu /etc/rc.localoder erstellen Sie entsprechende Init-Skripte gemäß der Standardmethode Ihrer Distribution.
  3. Die --deleteOption dazu rsyncsollte das bereits tun.

Antwort2

Ich würde so etwas machen:

cd directory2watch
# watching SUBdirectories
inotifywait --monitor --recursive *|
        while read path action file
        do
                # To get an idea of possible actions that will be
                # reported:
                echo path=$path action=$action file=$file
                # Decide on a followup base on $action:
                case $action in
                  "DELETE") ...
                          ;;
                  "CLOSE_WRITE,CLOSE")
                          ...
                          ;;
                esac

        done

verwandte Informationen