web-dev-qa-db-fra.com

Comment rsync un répertoire dans un nouveau répertoire avec un nom différent?

Je fais un transfert de données, l'ancien système de fichiers repose profondément sur un répertoire qui se trouve maintenant sur un chemin différent. Il s'agit d'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 ce répertoire sur le même ancien chemin. Mais le nom du répertoire a également changé.

Existe-t-il un moyen simple de synchroniser un répertoire vers un répertoire cible avec un nom différent?

55
Zen

Si vous souhaitez utiliser rsync pour faire récursivement le répertoire dest une copie exacte du répertoire src:

rsync -a src/ dest

La page de manuel rsync explique comment cela fonctionne:

Une barre oblique de fin sur la source [...] évite de créer un niveau de répertoire supplémentaire à la destination. Vous pouvez penser à un / De fin sur une source comme signifiant "copier le contenu de ce répertoire" par opposition à "copier le répertoire par son nom" [...]

96
Adrian

Si l'ancien et le nouveau système de fichiers sont tous deux accessibles à votre ordinateur, envisagez d'utiliser un lien symbolique au lieu de rsync. Si votre commande rsync que vous utilisez ne spécifie pas d'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 garder synchronisés.

L'utilisation d'un lien symbolique est une solution unique qui reflétera 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.

Disons que vous aviez l'ancien git dans un répertoire appelé/old/path/old_git et maintenant le référentiel de code a été déplacé vers/new/path/new_git

Tu peux faire:

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

Cela créera un lien en tant que tel:

/ old/path/old_git ->/new/path/new_git

De sorte que tout ce qui est mis dans new_git sera également instantanément disponible à l'ancienne, sans dupliquer les données et sans avoir à les synchroniser en permanence.

1
jrel

Je trouve maintenant une solution alternative.

En utilisant rysnc -r /Origin/* /target/ peut synchroniser tout le contenu du répertoire d'origine vers le répertoire cible.

0
Zen