
Ich führe eine Datenübertragung durch. Das alte Dateisystem basiert stark auf einem Verzeichnis, das sich jetzt auf einem anderen Pfad befindet. Dies ist ein Git-Verzeichnis, in dem Code online gespeichert wird. Ich habe keine Rechte, es zu verschieben oder umzubenennen.
Ich kann dieses Verzeichnis also per rsync auf denselben alten Pfad synchronisieren. Allerdings hat sich auch der Verzeichnisname geändert.
Gibt es eine einfache Möglichkeit, ein Verzeichnis per rsync mit einem Zielverzeichnis mit einem anderen Namen zu synchronisieren?
Antwort1
rsync
Wenn Sie das Verzeichnis rekursiv zu dest
einer exakten Kopie des Verzeichnisses machen möchten src
:
rsync -a src/ dest
Die rsync
Manpage erklärt, wie das funktioniert:
Ein abschließender Schrägstrich an der Quelle [...] vermeidet das Erstellen einer zusätzlichen Verzeichnisebene am Ziel. Sie können sich einen abschließenden Schrägstrich an
/
einer Quelle so vorstellen, dass er „den Inhalt dieses Verzeichnisses kopieren“ bedeutet, im Gegensatz zu „das Verzeichnis nach Namen kopieren“ [...]
Antwort2
Antwort3
Wenn sowohl das alte als auch das neue Dateisystem von Ihrem Computer aus zugänglich sind, sollten Sie anstelle von rsync einen symbolischen Link verwenden. Wenn Ihr verwendeter rsync-Befehl keine Hosts angibt (oder wenn es sich um denselben Host handelt), ist dies der Fall. Sie versuchen, zwei Verzeichnisse mit unterschiedlichen Namen auf demselben Host zu spiegeln. Verwenden Sie hierfür nicht rsync, da Sie die Daten duplizieren und rsync häufig ausführen müssen, um sie synchron zu halten.
Die Verwendung eines symbolischen Links ist eine einmalige Lösung, die zwei Verzeichnisse (mit unterschiedlichen Namen) spiegelt und fast keinen Speicherplatz benötigt. Es ist, als würde man ein Alias-Verzeichnis erstellen, das auf ein anderes Verzeichnis verweist.
Nehmen wir an, Sie hatten das alte Git in einem Verzeichnis namens /old/path/old_git und jetzt wurde das Code-Repository nach /new/path/new_git verschoben
Du kannst tun:
cd /old/path
rm -rf old_git (if you still have it there, get rid of it, or move it out of the way)
ln -s /new/path/new_git old_git
Dadurch wird ein Link wie dieser erstellt:
/alt/Pfad/altes_git -> /neu/Pfad/neues_git
Damit ist alles, was in new_git eingegeben wird, auch auf die alte Art sofort verfügbar, ohne Daten zu duplizieren und ohne sie ständig synchronisieren zu müssen.
Antwort4
Ich habe jetzt eine alternative Lösung gefunden.
Durch die Verwendung rysnc -r /origin/* /target/
können alle Inhalte vom Ursprungsverzeichnis mit dem Zielverzeichnis synchronisiert werden.