Je fais un transfert de données, l'ancien système de fichiers s'appuie fortement sur un répertoire qui est maintenant sur un chemin différent. Ceci est un répertoire git qui stocke le code en ligne. Je n'ai aucun droit de le déplacer ou de le renommer.
Donc, ce que je peux faire, c'est rsync de ce répertoire avec le même ancien chemin. Mais le nom du répertoire a également changé.
Existe-t-il un moyen simple de rynchroniser un répertoire dans un répertoire cible avec un nom différent?
src
répertoire sousdest
répertoirersync
j'ai jamais utilisé. Si cela vous arrive réellement, vous manquez la barre oblique à la fin de l'argument du répertoire source.dest
un symlnk àsrc
, elle se termine à la place jusqu'à la copiesrc
àsrc/src
. Testé sur macOS. J'espérais pouvoir remplacerbar -> foo/
parbar/
, mais je devais utiliser un répertoire temporaire intermédiaire.dest
s'agit d'un lien symbolique verssrc
, simplementrm dest
avant d'exécuter la commande ci-dessus.rsync
est assez intelligent pour créerdest
avant de copier le contenu desrc
. Vous n'avez pas besoin d'un répertoire de temp intermédiaire.Si l'ancien et le nouveau système de fichiers sont tous deux accessibles à votre machine, envisagez d'utiliser un lien symbolique au lieu de rsync. Si votre commande rsync que vous utilisez ne spécifie pas les hôtes (ou s’il s’agit du même hôte), c’est le cas. Vous essayez de mettre en miroir deux répertoires avec un nom différent sur le même hôte. N'utilisez pas rsync pour cela, car vous dupliquez les données et vous devrez exécuter votre rsync souvent pour les synchroniser.
L'utilisation d'un lien symbolique est une solution ponctuelle qui met en miroir deux répertoires (avec des noms différents) et ne nécessite presque pas d'espace. C'est comme créer un répertoire d'alias qui pointe vers un autre répertoire.
Supposons que l'ancien git se trouve dans un répertoire appelé / old / path / old_git et que le référentiel de code a été déplacé vers / new / path / new_git.
Tu peux faire:
Cela créera un lien en tant que tel:
/ old / path / old_git -> / new / path / new_git
Ainsi, tout ce qui est mis dans new_git sera aussi instantanément disponible à l'ancienne, sans duplication des données et sans avoir à les synchroniser en permanence.
la source
Je trouve une solution alternative maintenant.
Utiliser
rysnc -r /origin/* /target/
peut synchroniser tout le contenu du répertoire d'origine vers le répertoire cible.la source
rsync -r $(find /origin -maxdepth 1 -type f) /target/
. Comme @RayBurgemeestre l'a fait remarquer, l'expansion globale du shell n'inclut pas les fichiers de points.