Ich fange damit an rsync
und habe versucht, damit zwei Ordner auf dem lokalen System synchron zu halten. Ich habe einen Quellordner, dessen Inhalt sich im Laufe der Zeit ändert (einige Dateien werden hinzugefügt, einige geändert und einige gelöscht) und einen Zielordner, der fast ein Spiegel der Quelle sein soll. Also habe ich versucht, rsync wie folgt zu verwenden:
rsync -a --delete "${source_dir}" "${target_dir}";
Dadurch bleibt der Inhalt des Ziels exakt mit dem Inhalt der Quelle identisch. Ich möchte jedoch in der Lage sein, einige Dateien zum Ziel und nicht zur Quelle hinzuzufügen, aber ich möchte nicht, dass sie jedes Mal gelöscht werden, wenn ich rsync mache. Auf der anderen Seite sollten Dateien, die früher synchronisiert und dann in der Quelle gelöscht wurden, weiterhin gelöscht werden.
Gibt es eine Möglichkeit, dies zu tun, ohne den Befehl für jede Datei ändern zu müssen, die ich ausschließen möchte?
Update : Ich sollte erwähnen, dass ich nicht auf rsync beschränkt bin. Wenn ein anderes Programm die Arbeit erledigt, ist das auch in Ordnung. Ich habe gerade versucht, dies mit rsync zu lösen.
Antworten:
rsync
hat eine Option namens--exclude-from
Option, mit der Sie eine Datei erstellen können, die eine Liste aller Dateien enthält, die Sie ausschließen möchten. Sie können diese Datei jederzeit aktualisieren, wenn Sie einen neuen Ausschluss hinzufügen oder einen alten entfernen möchten.Wenn Sie die Ausschlussdatei mit
/home/user/rsync_exclude
dem neuen Befehl erstellen, wäre dies:Wenn Sie die Ausschlusslistendatei erstellen, sollten Sie jede Ausschlussregel in eine separate Zeile setzen. Die Ausschlüsse beziehen sich auf Ihr Quellverzeichnis. Wenn Ihre
/home/user/rsync_exclude
Datei die folgenden Optionen enthielt:secret_file
in Ihrem Quellverzeichnis aufgerufenen Dateien oder Verzeichnisse werden ausgeschlossen.${source_dir}/first_dir/subdir
werden ausgeschlossen, aber eine leere Version vonsubdir
wird synchronisiert.${source_dir}/second_dir
mit dem Präfix voncommon_name.
werden ignoriert. Socommon_name.txt
,common_name.jpg
usw.quelle
Da Sie erwähnt haben: Ich bin nicht auf rsync beschränkt:
Skript zum Verwalten des Spiegels, mit dem zusätzliche Dateien zum Ziel hinzugefügt werden können
Unten ein Skript, das genau das tut, was Sie beschreiben.
Das Skript kann im ausführlichen Modus ausgeführt werden (der im Skript festgelegt wird), der den Fortschritt der Sicherung ausgibt (Spiegelung). Sie müssen nicht sagen, dass dies auch zum Protokollieren der Sicherungen verwendet werden kann:
Ausführliche Option
Das Konzept
1. Bei der ersten Sicherung das Skript:
.recentfiles
2. Beim nächsten und so weiter Backup
.currentfiles
..recentfiles
(Auflistung der Situation bei der vorherigen Sicherung) mit verglichen.currentfiles
. Nur Dateien, aus.recentfiles
denen nicht vorhanden ist,.currentfiles
werden offensichtlich aus der Quelle entfernt und vom Ziel entfernt..currentfiles
Datei umbenannt,.recentfiles
um den nächsten Sicherungszyklus usw. bereitzustellen.Das Skript
Wie benutzt man
backup_special.py
Ändern Sie - wenn Sie möchten - die ausführliche Option im Kopf des Skripts:
Führen Sie es mit Quelle und Ziel als Argumente aus:
Geschwindigkeit
Ich habe das Skript in einem 10-GB-Verzeichnis mit etwa 40.000 Dateien und Verzeichnissen auf meinem Netzlaufwerk (NAS) getestet. Die Sicherung wurde fast zur gleichen Zeit wie bei rsync durchgeführt.
Das Aktualisieren des gesamten Verzeichnisses dauerte bei 40.000 Dateien nur wenige Sekunden länger als bei rsync. Dies ist nicht akzeptabel und keine Überraschung, da das Skript den Inhalt mit dem zuletzt erstellten Backup vergleichen muss.
quelle