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...
- Das funktioniert einigermaßen gut. Wenn Sie es etwas ausgefallener haben möchten, schauen Sie sichFamilie.
- Fügen Sie es am Ende hinzu
/etc/rc.local
oder erstellen Sie entsprechende Init-Skripte gemäß der Standardmethode Ihrer Distribution. - Die
--delete
Option dazursync
sollte 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