Ich verwende Fedora 17 64-Bit und das rsync --exclude=/home/ben/<dir>
funktioniert nicht wie erwartet.
Ich versuche rsync
mein Home-Verzeichnis auf ein USB-Stick zu verschieben, aber ich möchte auf jeden Fall Verzeichnisse ausschließen, die Cache-Dateien enthalten und Dateien erstellen. Dies ist der Befehl, den ich benutze:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
Inhalt von ~/build
und ~/.ccache
wird jedoch von kopiert rsync
. Was mache ich falsch?
Antworten:
Globale
rsync
Filterregeln, die mit einem führenden beginnen,/
sind an der Wurzel der Übertragung verankert . Zitat aus dem Abschnitt "INCLUDE / EXCLUDE PATTERN RULES" der Manpage:In Ihrem Befehl (
rsync ... -arv /home/ben home-ben/
)/home/ben/foo
würde die Datei nach übertragenhome-ben/ben/foo
. Die Wurzel der Übertragung isthome-ben
und der richtige Filterpfad ist/ben/foo
. Somit,/home/ben/.ccache
benötigen Sie einen Filterpfad von/ben/.ccache
/home/ben/build/
benötigen Sie einen Filterpfad von/ben/build/
Eine ausführlichere Erklärung finden Sie im Abschnitt "ANCHORING INCLUDE / EXCLUDE PATTERNS" der
rsync(1)
Manpage .Beachten Sie, dass das Weglassen des Führenden
/
nicht unbedingt das ist, was Sie wollen. Nochmals zitieren aus demselben Manpage-Abschnitt:Somit würde ein Filtermuster von
build/
mit einem Erstellungsverzeichnis überall in/home/ben
sogar übereinstimmen/home/ben/many/sub/directories/build/
.quelle
rsync -a source destination
kopiert , andernfalls wird das Quellverzeichnis selbst in das Ziel kopiert. Hiermit wird festgelegt, wie der Stamm der Übertragung lautet, um den Ausschlussausdruck zu informieren. Die ordnungsgemäße Verwendung von / im Ausschlussausdruck wird dann oben erläutert. Beachten Sie insbesondere, dass diesrsync --exclude='/dir1' source destination
nichts ausschließt.Ich denke, Ihre
exclude
Pfade müssen relativ zum Quellpfad sein. Können Sie das stattdessen versuchen?Hier ist ein Test zum Vergleich:
quelle
--verbose
Befehls zeigt das Format , das Sie verwenden.Ich hatte dieses Problem in einem Skript (ich weiß nicht, ob es Ihr Fall ist). Ich habe diesen Befehl in einem Skript verwendet und sh anstelle von bash verwendet. Überprüfe den Schebang am Anfang deines Skripts.
quelle
Ihr Ausschlussmuster würde funktionieren, wenn Sie den gesamten Pfad / den Ausgangspfad synchronisieren, dh ohne einen abschließenden Schrägstrich:
Aber besser nur den Inhalt des Ordners mit einem abschließenden Schrägstrich synchronisieren:
Sie können auch eine Ignorierliste verwenden, siehe: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folder
quelle
Um einen bestimmten Ordner mit rsync auszuschließen, müssen Sie den relativen Pfad im Befehl berücksichtigen. in deinem Fall:
Dabei ist "ben" der Ordner, den Sie synchronisieren
quelle