GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exclure des fichiers et des répertoires avec Rsync

Rsync est un utilitaire de ligne de commande rapide et polyvalent qui synchronise les fichiers et les dossiers entre deux emplacements via un shell distant.

Avec Rsync, vous pouvez mettre en miroir des données, créer des sauvegardes incrémentielles et copier des fichiers entre les systèmes. Lors de la copie de données, vous souhaiterez peut-être exclure un ou plusieurs fichiers ou répertoires en fonction de leur nom ou de leur emplacement.

Dans ce tutoriel, nous allons vous montrer comment exclure des fichiers et des répertoires avec rsync.

Avant de commencer #

Vous devez avoir une connaissance de base du fonctionnement de rsync.

Dans les exemples ci-dessous, nous utiliserons rsync avec le -a , option. Cela indique à rsync de synchroniser les répertoires de manière récursive, de transférer des périphériques spéciaux et de blocage et de conserver les liens symboliques, les heures de modification, le groupe, la propriété et les autorisations.

Lorsque vous excluez des fichiers ou des répertoires, vous devez utiliser leurs chemins relatifs vers le répertoire source.

Il existe deux options pour spécifier les fichiers et répertoires que vous souhaitez exclure :

  • Depuis une ligne de commande , en utilisant le --exclude option.
  • Depuis un fichier , en utilisant le --exclude-from option.

Exclure un numéro de fichier spécifique

Pour exclure un fichier spécifique, passez le chemin relatif du fichier à --exclude option.

Dans l'exemple suivant, le fichier src_directory/file.txt ne sera pas transféré :

rsync -a --exclude 'file.txt' src_directory/ dst_directory/

Exclure un numéro de répertoire spécifique

Exclure un répertoire spécifique revient à exclure un fichier, il suffit de passer le chemin relatif du répertoire à --exclude comme indiqué ci-dessous :

rsync -a --exclude 'dir1' src_directory/ dst_directory/

Si vous souhaitez exclure le contenu du répertoire mais pas le répertoire lui-même, utilisez dir1/* au lieu de dir1 :

rsync -a --exclude 'dir1/*' src_directory/ dst_directory/

Exclure plusieurs fichiers ou répertoires #

Pour exclure plusieurs fichiers ou répertoires, spécifiez simplement plusieurs --exclude option :

rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/

Si vous préférez utiliser un seul --exclude option, vous pouvez lister les fichiers et répertoires que vous souhaitez exclure entre accolades {} séparés par une virgule comme indiqué ci-dessous :

rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/

Si le nombre de fichiers et/ou de répertoires que vous souhaitez exclure est important, au lieu d'utiliser plusieurs --exclude options vous pouvez spécifier les fichiers et les répertoires que vous souhaitez exclure dans un fichier et transmettre le fichier au --exclude-from option.

La commande ci-dessous fait exactement la même chose que celle ci-dessus :

rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
exclude-file.txt
file1.txt
dir1/*
dir2

Exclure plusieurs fichiers ou répertoires en fonction d'un modèle #

Avec rsync, vous pouvez également exclure des fichiers et des répertoires en fonction d'un modèle qui correspond au nom du fichier ou du répertoire.

Par exemple, pour exclure tous les .jpg fichiers que vous exécuteriez :

rsync -a --exclude '*.jpg*' src_directory/ dst_directory/

Il est un peu plus délicat d'exclure tous les autres fichiers et répertoires, à l'exception de ceux qui correspondent à un certain modèle. Supposons que vous souhaitiez exclure tous les autres fichiers et répertoires, à l'exception des fichiers se terminant par .jpg .

Une option consiste à utiliser la commande suivante :

rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/

Lorsque vous utilisez plusieurs options d'inclusion/exclusion, la première règle correspondante s'applique.

  • --include='*.jpg' - D'abord, nous incluons tous les .jpg fichiers.
  • --include='*/' - Ensuite, nous incluons tous les répertoires à l'intérieur du src_directory annuaire. Sans cela, rsync ne copiera que *.jpg fichiers dans le répertoire de niveau supérieur.
  • -m - Supprime les répertoires vides.

Une autre option serait de diriger la sortie de la find commande pour rsync :

find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
  • -printf %P\\0\\n - supprimera le src_directory/ à partir du chemin du fichier.
  • --files-from=- - signifie inclure uniquement les fichiers de l'entrée standard (fichiers transmis par la commande find).

Conclusion #

Dans ce didacticiel, vous avez appris à exclure des fichiers et des répertoires lors du transfert de données avec Rsync. Il y a beaucoup plus à apprendre sur Rsync sur la page du manuel de l'utilisateur de Rsync.


Linux
  1. Comment archiver des fichiers et des répertoires sous Linux [Partie 2]

  2. Copier des fichiers avec SCP et Rsync

  3. Comment transférer des fichiers sous Linux avec SCP et Rsync

  4. Comment copier/déplacer des fichiers et des répertoires sous Linux avec les commandes "cp" et "mv"

  5. Comment puis-je exclure des fichiers par défaut avec rsync ?

Comment déplacer des fichiers et des répertoires sous Linux (commande mv)

Comment transférer des fichiers avec Rsync sur SSH

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment synchroniser des fichiers et des répertoires à l'aide de Zaloha.sh

Comment sauvegarder des fichiers et des répertoires à l'aide de Rsync sous Linux

Synchronisation des fichiers et répertoires Linux avec rsync