Comment rsynciser plusieurs dossiers sources


34

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 tobackupdossier contenant un lien symbolique et utiliser les -Loptions

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:


33

Vous pouvez transmettre plusieurs arguments source.

rsync -a /etc/fstab /home/user/download bkp

Cela crée bkp/fstabet bkp/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:

    rsync -a \
        --include=/etc --include=/etc/fstab \
        --include=/home --include=/home/user --include='/home/user/download/***' \
        --exclude='*' / bkp
    
  • Incluez tous les répertoires de niveau supérieur avec /*/(pour que rsync traverse /etcet /homelors 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 /etcet /home/user/download.

    rsync -a --prune-empty-dirs \
        --include='/*/' --include='/*/*/' \
        --include=/etc/fstab \
        --include='/home/user/download/***' \
        --exclude='*' / bkp
    

1
Génial, mais comment conserver la structure de répertoires dans bkp?
Rodrigo

Je veux dire, bkp / etc / fstab et bkp / home / utilisateur / dowlonad? Ou peut-être / bkp / fstab et bkp / download?
Rodrigo

@Rodrigo J'ai révisé ma réponse
Gilles 'SO- arrête d'être méchant'

13

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' --relativeoption.

Dans ce cas, nous pourrions avoir quelque chose comme suit:

rsync -aR /etc/fstab /home/user/download bkp

ce qui entraînerait bkp/etc/fstabet bkp/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' --relativeoption ici )

Donc, par exemple, si nous faisions cela

rsync -aR /home/./user1/download /home/./user2/download bkp

on se retrouverait avec bkp/user1/downloadet bkp/user2/download.


2

Cela fonctionne également - des accolades contenant une liste de sources séparées par des virgules.

rsync -vap --progress --stats root@server:{/etc,/root/backups,/home/ultralazer} /mnt/bigdrive

Un peu similaire à ce qui se passe lorsque vous appelez des accolades sytnax avec cp et certains autres utilitaires:

cp -vr /etc /root/backups /home/{ultralazer,zerocool} /mnt/bigdrive

Comment spécifiez-vous le port ssh avec cela? Cette syntaxe semble fonctionner si vous utilisez-e
tcurdt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.