Ich möchte mehrere Quellen synchronisieren und ich frage mich, wie ich das am besten erreichen kann.
z.B
/etc/fstab
/home/user/download
Ich habe über 3 Lösungen nachgedacht:
- Lösung 1
Mehrfachaufruf zu rsync
rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp
con: schwerer zu aggregieren stat
- Lösung 2
Erstellen Sie einen tobackup
Ordner mit Symlink und verwenden Sie die -L
Optionen
sync -aL /home/user/tobackup bkp
con: content to backup darf keine symlinks enthalten
- Lösung 3
Verschieben Sie Dateien in das Backup und erstellen Sie einen Symlink am ursprünglichen Speicherort
rsync -a /home/user/tobackup bkp
con: einige manuelle Konfig
Welches empfehlen Sie?
Gibt es einen besseren Weg?
Antworten:
Sie können mehrere Quellargumente übergeben.
Dies erzeugt
bkp/fstab
undbkp/download
, wie die separaten Befehle, die Sie gegeben haben. Es kann wünschenswert sein, stattdessen die Quellstruktur beizubehalten. Verwenden Sie dazu/
als Quelle und verwenden Sie Einschluss- / Ausschlussregeln, um anzugeben, welche Dateien kopiert werden sollen. Hierfür gibt es zwei Möglichkeiten:Schließen Sie explizit jede Datei sowie jede Verzeichniskomponente ein, die zu ihr führt, und zwar
/***
am Ende der Verzeichnisse, wenn Sie den gesamten Verzeichnisbaum kopieren möchten:Fügen Sie alle Verzeichnisse der oberste Ebene mit
/*/
(so dass rsync durchqueren/etc
und/home
wenn für Dateien zu kopieren suchen) und Second-Level - Verzeichnisse mit/*/*/
(für/home/user
), aber abstreifen Verzeichnisse , in denen keine Datei kopiert wird. Dies ist bequemer, da Sie die Eltern nicht explizit auflisten müssen. Sie könnten sogar verwenden,--prune-empty-dirs --include='*/'
anstatt die Anzahl der Ebenen zu zählen, aber dies ist hier unpraktisch, da rsync das gesamte Dateisystem durchlaufen würde, um Verzeichnisse zu durchsuchen, obwohl keine der Include-Regeln mit irgendetwas außerhalb von/etc
und übereinstimmen kann/home/user/download
.quelle
Die Antwort von Gilles gefällt mir sehr gut. Ich möchte jedoch hinzufügen, dass aus meiner Sicht die Anforderung, mehrere Ordner unter Beibehaltung der Verzeichnisstruktur zu synchronisieren, am besten durch Übergabe mehrerer Quellargumente in Verbindung mit der
--relative
Option erfüllt wird .In diesem Fall könnten wir Folgendes haben:
die in Folge hätte
bkp/etc/fstab
undbkp/home/user/download
.Das Beste daran ist, dass wir (glaube ich seit rsync v. 2.6.7) im Wesentlichen steuern können, wie viel von der Verzeichnisstruktur wir auf dem Empfänger replizieren möchten.
(Siehe Dokumentation zur
--relative
Option hier )Also zB wenn wir das gemacht haben
wir würden mit
bkp/user1/download
und endenbkp/user2/download
.quelle
Dies funktioniert auch - geschweifte Klammern, die eine durch Kommas getrennte Liste von Quellen enthalten.
Ähnlich wie beim Aufrufen von geschweiften Klammern sytnax mit cp und bestimmten anderen Dienstprogrammen:
quelle
-e