Ich mache eine Datenübertragung, das alte Dateisystem stützt sich stark auf ein 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 mit demselben alten Pfad synchronisieren. Aber auch der Verzeichnisname hat sich geändert.
Gibt es eine einfache Möglichkeit, ein Verzeichnis mit einem Zielverzeichnis mit einem anderen Namen zu synchronisieren?
src
Verzeichnis unterdest
directoryrsync
ich jemals benutzt habe. Wenn Ihnen das tatsächlich passiert, fehlt der abschließende Schrägstrich am Ende des Quellverzeichnis-Arguments.dest
ein symlnk zusrc
, es stattdessen landet das Kopierensrc
zusrc/src
. Getestet unter macOS. Hatte gehofft , dass ich ersetzen könntebar -> foo/
mitbar/
, aber ein Zwischen temporäres Verzeichnis verwenden musste.dest
ein Symlink zu istsrc
, führen Sie einfachrm dest
den obigen Befehl aus.rsync
ist schlau genug, umdest
vor dem Kopieren die Inhalte von zu erstellensrc
. Sie brauchen kein Zwischentemp-Verzeichnis.Wenn Ihr Computer sowohl auf das alte als auch auf das neue Dateisystem zugreifen kann, sollten Sie einen symbolischen Link anstelle von rsync verwenden. Wenn der von Ihnen verwendete Befehl rsync keine Hosts angibt (oder wenn es sich um denselben Host handelt), ist dies der Fall. Sie versuchen, zwei Verzeichnisse mit unterschiedlichem Namen auf demselben Host zu spiegeln. Verwenden Sie dazu nicht rsync, da Sie die Daten duplizieren und Ihren rsync häufig ausführen müssen, um sie synchron zu halten.
Die Verwendung eines symbolischen Links ist eine einmalige Korrektur, die zwei Verzeichnisse (mit unterschiedlichen Namen) spiegelt und fast keinen Speicherplatz benötigt. Es ist wie das Erstellen eines Aliasverzeichnisses, das auf ein anderes Verzeichnis verweist.
Nehmen wir an, Sie hatten den alten Git in einem Verzeichnis namens / old / path / old_git und jetzt ist das Code-Repository nach / new / path / new_git umgezogen
Du kannst tun:
Dadurch wird ein Link als solcher erstellt:
/ old / path / old_git -> / new / path / new_git
Damit alles, was in new_git abgelegt wird, auch auf die alte Art und Weise sofort verfügbar ist, ohne Daten zu duplizieren und ohne sie ständig synchronisieren zu müssen.
quelle
Ich finde jetzt eine alternative Lösung.
Mit
rysnc -r /origin/* /target/
können Sie den gesamten Inhalt vom Ursprungsverzeichnis zum Zielverzeichnis synchronisieren.quelle
rsync -r $(find /origin -maxdepth 1 -type f) /target/
. Wie @RayBurgemeestre betonte, enthält die Shell-Glob-Erweiterung keine Punktdateien.