Helfen Sie mit Watch Directory Script

1238
Nick DeMayo

Erstens sollte ich beachten, dass ich relativ neu im Schreiben von Skripten bin, aber ich kenne mich in Ubuntu so gut aus, dass es mir nichts ausmacht, sich die Hände schmutzig zu machen ...

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

#! / bin / sh # sudo rsync -av --omit-dir-times --delete --progress / home / sunmorgus / tempx / Complete / / media / complete /  während [1] tun echo 'Überwachungsverzeichnis:' $ WATCHED_DIR 'für neue Dateien' while file = $ (inotifywait -q -e erstellt "$ WATCHED_DIR" --format "% f") tun echo 'Neue Datei zum Hochladen in Moonback' $ -Datei notify-send -i "gtk-go-up" "Complete Folder Monitor" "Datei $ file hochladen"  #rsync geht hier sudo rsync -av --omit-dir-times --delete --progress / home / sunmorgus / tempx / Complete / / media / complete /  notify-send -i "gtk-home" "Complete Folder Monitor" "Datei wurde hochgeladen." erledigt erledigt 

Es ist 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 dies der beste Weg, um das zu tun, 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 der beste Weg, dieses Skript beim Start auszuführen? Im Moment habe ich den Bildschirm "Startup Applications" aufgerufen und einen neuen Datensatz hinzugefügt, der die Zeile "gnome-terminal -e /script.sh" enthält, die funktioniert, aber nicht ideal erscheint. Ich habe versucht, das Skript zum init.d-Ordner hinzuzufügen und update-rc.d auszuführen, und das Skript zu /etc/rc.local hinzugefügt, aber beide funktionierten nicht (ich bekam keine Fehler, aber das Skript lief nicht nach einem Neustart).

Schließlich ... gibt es eine Möglichkeit, dieses Skript so zu ändern, dass es auch vom Ziel gelöscht wird, wenn es aus der Quelle gelöscht wird? Das Skript wird nur ausgeführt, wenn Dateien hinzugefügt und nicht gelöscht werden. Während der rsync-Teil vom Ziel gelöscht wird, wenn er aus der Quelle gelöscht wird, wird das Skript erst ausgeführt, wenn eine neue Datei hinzugefügt wird. (hoffentlich macht dieser Absatz Sinn).

1

2 Antworten auf die Frage

1
bahamat

Für deine Fragen ...

  1. Das wird einigermaßen gut funktionieren. Wenn Sie Lust haben wollen, schauen Sie in famd .
  2. Fügen Sie es am Ende hinzu /etc/rc.localoder erstellen Sie geeignete Init-Skripts gemäß der Standardmethode Ihrer Distribution.
  3. Die --deleteOption rsyncsollte das schon tun.
2. Ich habe versucht, es zu rc.local hinzuzufügen ... es hat nicht funktioniert. Ich könnte es noch einmal versuchen, ich nehme an ... 3. Ich habe bereits --delete, aber der inotify-Teil des Skripts erkennt das Löschen nicht, daher werden Dateien nur gelöscht, wenn eine neue Datei hinzugefügt wird. Ich muss wissen, wie man erkannte Additionen und Löschungen inotify macht ... Nick DeMayo vor 12 Jahren 0
@sunmorgus Dann müssen Sie die richtigen Init-Skripte erstellen. Die Angaben hängen davon ab, welche Distribution Sie verwenden. Ich bin mir nicht sicher, was ich mit "inotify" tun soll. Vielleicht möchten Sie trotzdem zu "fam" wechseln. bahamat vor 12 Jahren 0
1
Gerrit A. Smit

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 
Möglicherweise fehlt am Ende der Zeile "CLOSE_WRITE, CLOSE" ein doppelter Anführungszeichen. Sie können Ihren Post [bearbeiten], wenn einer da sein sollte. Ben N vor 7 Jahren 0