Wie kann man rsync anweisen, einige Ordner am Zielort nicht zu löschen?

7

Also benutze ich Pelican zum Schreiben meines Blogs und lade das Ganze mit rsync hoch. OK.

Aber ich benutze auch Let's Encrypt und brauche dafür das bekannte Repository, das im Stammverzeichnis meiner Website gespeichert ist.

Gibt es also eine Möglichkeit, wie ich sagen kann: "rsync ... - nicht löschen. Gut bekannt ..."

Derzeit sind diese Mitarbeiter berechtigungsgeschützt, aber rsync mag es nicht.

Hier ist der aktuelle rsync-Befehl (von pelican selbst installiert, ich habe ihn nicht geschrieben):

rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude

Übrigens: Wenn Sie auch einen Vorschlag zur Verbesserung der Rsync-Effizienz haben, nehme ich das an (ja, es ist kein Thema).

22. Dezember
quelle

Antworten:

11

Von man rsync

--delete Dies weist rsync an, fremde Dateien von der empfangenden Seite zu löschen (solche, die nicht auf der sendenden Seite liegen), jedoch nur für die Verzeichnisse, die synchronisiert werden. Sie müssen rsync gebeten haben, das gesamte Verzeichnis (z. B. "dir" oder "dir /") zu senden, ohne einen Platzhalter für den Inhalt des Verzeichnisses zu verwenden (z. B. "dir / *"), da der Platzhalter durch die Shell erweitert wird und rsync somit a erhält Anforderung, einzelne Dateien zu übertragen, nicht das übergeordnete Verzeichnis der Dateien.

Also ich denke es sollte sein

rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete \
$(OUTPUTDIR)/ \
$(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) \
--cvs-exclude --exclude=/.well-known

(vorausgesetzt, es .well-knownist die Wurzel von $(SSH_TARGET_DIR)/)

Hai Luong Dong
quelle
6

Sie sollten die --excludeOption verwenden, um rsyncdieses Verzeichnis zu ignorieren. Wenn Sie nicht auch verwenden --delete-excluded(was Sie in diesem Fall nicht sollten), wird es in Ruhe gelassen.

Celada
quelle