Verwenden Sie rsync, um eine Datei automatisch in einen anderen Ordner zu kopieren

Ich habe diesen Befehl gefunden, um den Inhalt der Quelle in einen Zielordner zu kopieren.

rsync -r source/* destination

Was ich wirklich möchte, ist, dass dieser Befehl jedes Mal automatisch ausgeführt wird, wenn eine Datei zu meinem Quellordner hinzugefügt wird.

Ist das möglich?

Sie könnten ein Skript verwenden, das rsyncund inotifywie dieses kombiniert

Antworten (3)

Sie können Automator- und Ordneraktionen verwenden, um den Ordner zu überwachen und das Skript auszuführen.

Wenn Sie Automator starten und Neu auswählen, ist eine der angebotenen Optionen, eine „Ordneraktion“ durchzuführen. Am oberen Rand des Bildschirms haben Sie nach der Auswahl von Ordneraktion die Möglichkeit, einen Ordner zum „Überwachen“ auszuwählen.

Geben Sie hier die Bildbeschreibung ein

In Ihrem Fall sollten Sie meiner Meinung nach „Dienstprogramme“ in der Spalte ganz links auswählen und dann „Run Shell Script“ aus der zweiten Spalte in das Workflow-Fenster ziehen.

Geben Sie hier die Bildbeschreibung ein

Hier schreiben Sie ein beliebiges Skript, das Sie ausführen möchten, wenn Änderungen am Ordner vorgenommen werden. In diesem Fall Ihr rsync-Skript.

Geben Sie hier die Bildbeschreibung ein

Dies ist eine großartige Antwort, die davon profitieren würde, wenn einige der Inhalte hinter diesem Link im Beitrag aufgeführt werden.
Weitere Details hinzugefügt.

Eine schnelle und schmutzige Lösung für diese Frage , die auf UNIX-Plattformen portierbar ist (nicht spezifisch für OSX, aber unter HP-UX, Solaris, Linux usw. verwendet werden kann), besteht darin, rsync aus der crontab des Benutzers aufzurufen und den Ordner von rsync synchronisieren zu lassen Die Logik selbst bestimmt, ob der Ordner geändert wurde oder nicht. Eine Verfeinerung bei der Verwendung dieser portablen Lösung besteht darin, den Aufruf von rsync mit einem Datumstest zwischen einer berührten Datei (eigentlich ihrer Änderungszeit) und der Änderungszeit des zu synchronisierenden Ordners einzuschließen, aber dies ist nicht erforderlich, es sei denn, die Ordner zu synchronisiert werden, sind sehr groß (tief und/oder breit). Ideal für diese Lösung ist ein einzelner Ordner mit mehreren Unterordnern.

Ein Eintrag für die crontab, der den "Quick and Dirty"-Fall in einem Minutenabfrageintervall durchführt, lautet:

# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1

Das sollte für den schnellen und schmutzigen Fall reichen - mit anderen Worten, die Ordner werden innerhalb einer Minute nach einer Änderung auf dem neuesten Stand gehalten. Überprüfen Sie die Datei ~/.my_sync.log auf Ausführungsstatus – diese Datei wird mit der Zeit unbegrenzt wachsen, also ändern Sie „>>“ in „>“, sobald der korrekte Betrieb festgestellt wurde, um zumindest den neuesten rsync-Status zu protokollieren.

Ein weiterer Hinweis ist, dass der Schalter -z zu rsync verwendet werden sollte, wenn über ein Netzwerk synchronisiert wird. Der Schalter -z bewirkt, dass die Komprimierung für die Netzwerkdateiübertragungen verwendet wird. Wenn Sie rsync zum Synchronisieren zwischen Ordnern auf lokalen Dateisystemen auf einem Server verwenden, kann der Schalter -z normalerweise weggelassen werden.

Hinweis zur Verwendung der Crontab:

Wenn Sie Ihre Crontab nicht bearbeiten können mit:

$ crontab -e

Dann müssen Sie sich selbst die Erlaubnis geben, ein Crontab zu haben. Siehe die Manpage für crontab. In OSX muss Folgendes getan werden - die Änderung ist auf Linux-Systemen etwas anders: Kurz gesagt, stellen Sie sicher, dass sich Ihre Benutzer-ID in /usr/lib/cron/cron.allow befindet oder dass /usr/lib/cron/ cron.allow existiert nicht. Stellen Sie außerdem sicher, dass sich Ihre Benutzer-ID nicht in /usr/lib/cron/cron.deny befindet.

Das Tool, mit dem ich Ihre Ordner überwachen würde, ist Hazel . Es wäre hervorragend, das Skript zu starten, und Sie könnten es im Laufe der Zeit für viele weitere Ordner verwenden, wenn Sie an Dinge denken, die Sie automatisieren könnten.