Je veux synchroniser plusieurs sources et je me demande quel est le meilleur moyen d'y parvenir.
par exemple
/etc/fstab
/home/user/download
J'ai réfléchi à 3 solutions:
- Solution 1
appel multiple à rsync
rsync -a /etc/fstab bkp
rsync -a /home/user/download bkp
con: plus difficile d'avoir des statistiques agrégées
- Solution 2
créer un tobackup
dossier contenant un lien symbolique et utiliser les -L
options
sync -aL /home/user/tobackup bkp
con: le contenu à sauvegarder ne doit pas contenir de lien symbolique
- Solution 3
déplacer des fichiers dans pour sauvegarder et créer un lien symbolique à l'emplacement d'origine
rsync -a /home/user/tobackup bkp
con: une configuration manuelle
Lequel recommandez-vous ?
Y a-t-il un meilleur moyen?
Réponses:
Vous pouvez transmettre plusieurs arguments source.
Cela crée
bkp/fstab
etbkp/download
, comme les commandes séparées que vous avez donné. Il peut être souhaitable de conserver la structure source à la place. Pour ce faire, utilisez/
comme source et utilisez les règles d'inclusion-exclusion pour spécifier les fichiers à copier. Il y a deux façons de faire ça:Incluez explicitement chaque fichier ainsi que chaque composant de répertoire qui y mène, avec
/***
à la fin des répertoires lorsque vous souhaitez copier l’arborescence de répertoires complète:Incluez tous les répertoires de niveau supérieur avec
/*/
(pour que rsync traverse/etc
et/home
lors de la recherche de fichiers à copier) et les répertoires de second niveau avec/*/*/
(pour/home/user
), mais supprimez les répertoires dans lesquels aucun fichier n'est copié. Ceci est plus pratique car vous n'avez pas à lister explicitement les parents. Vous pouvez même utiliser--prune-empty-dirs --include='*/'
au lieu de compter le nombre de niveaux, mais cela n’est pas pratique ici, car rsync traverserait tout le système de fichiers pour explorer les répertoires, même si aucune des règles d’inclusion ne peut correspondre à quoi que ce soit à l’extérieur/etc
et/home/user/download
.la source
J'aime beaucoup la réponse de Gilles, cependant, j'aimerais ajouter qu'à mon avis, il est nécessaire de synchroniser plusieurs dossiers tout en préservant la structure de répertoires en transmettant plusieurs arguments source conjointement à l'
--relative
option.Dans ce cas, nous pourrions avoir quelque chose comme suit:
ce qui entraînerait
bkp/etc/fstab
etbkp/home/user/download
.La meilleure partie de cela est que (je pense depuis rsync v. 2.6.7), nous pouvons essentiellement contrôler la quantité de la structure de répertoire que nous voulons répliquer chez le destinataire.
(Voir la documentation sur l'
--relative
option ici )Donc, par exemple, si nous faisions cela
on se retrouverait avec
bkp/user1/download
etbkp/user2/download
.la source
Cela fonctionne également - des accolades contenant une liste de sources séparées par des virgules.
Un peu similaire à ce qui se passe lorsque vous appelez des accolades sytnax avec cp et certains autres utilitaires:
la source
-e