Rsync est un outil très puissant pour effectuer des sauvegardes ou synchroniser des fichiers et des répertoires entre deux emplacements (ou serveurs) différents.
Vous le savez déjà, car nous vous avons présenté plus tôt des exemples pratiques sur rsync.
Dans une situation de sauvegarde typique, vous souhaiterez peut-être exclure un ou plusieurs fichiers (ou répertoires) de la sauvegarde. Vous pouvez également vouloir exclure un type de fichier spécifique de rsync.
Cet article explique comment ignorer plusieurs fichiers et/ou répertoires lors de la rsync avec des exemples.
Tout d'abord, créez un exemple de structure de répertoires comme indiqué ci-dessous (avec quelques fichiers vides) qui peut être utilisé à des fins de test.
$ cd ~ $ mkdir -p source/dir1/dir2 $ mkdir -p source/dir3 $ touch source/file1.txt $ touch source/file2.txt $ touch source/dir1/dir2/file3.txt $ touch source/dir3/file4.txt
La commande ci-dessus créera un répertoire source (sous votre répertoire personnel) avec la structure suivante.
source - file1.txt - file2.txt - dir1 - dir2 - file3.txt - dir3 - file4.txt
1. Exclure un répertoire spécifique
Si vous ne souhaitez pas synchroniser le répertoire dir1 (y compris tous ses sous-répertoires) de la source vers le dossier de destination, utilisez l'option rsync -exclude comme indiqué ci-dessous.
$ rm -rf destination $ rsync -avz --exclude 'dir1' source/ destination/ building file list ... done created directory dest ./ file1.txt file2.txt dir3/ dir3/file4.txt
Vérifiez que dir1 n'est pas copié du répertoire source vers le répertoire de destination.
$ find destination destination destination/file2.txt destination/file1.txt destination/dir3 destination/dir3/file4.txt
2. Exclure plusieurs répertoires correspondant à un modèle
L'exemple suivant exclura tout répertoire (ou sous-répertoires) sous source/ qui correspond au modèle "dir*"
$ rm -rf destination $ rsync -avz --exclude 'dir*' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt
Vérifiez le répertoire de destination pour vous assurer qu'il n'a pas copié de répertoires contenant le mot-clé "dir".
$ find destination destination destination/file2.txt destination/file1.txt
3. Exclure un fichier spécifique
Pour exclure un fichier spécifique, utilisez le chemin relatif du fichier dans l'option d'exclusion comme indiqué ci-dessous.
$ rm -rf destination $ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/ building file list ... done created directory destination ./ file1.txt file2.txt dir1/ dir1/dir2/ dir3/ dir3/file4.txt
Vérifiez le répertoire de destination pour vous assurer qu'il n'a pas copié le fichier spécifique (dir1/dir2/file3.txt dans cet exemple).
$ find destination destination destination/file2.txt destination/file1.txt destination/dir1 destination/dir1/dir2 destination/dir3 destination/dir3/file4.txt
4. Le chemin d'exclusion est toujours relatif
Si vous ne faites pas attention, vous pourriez commettre cette erreur.
Dans l'exemple suivant, l'option d'exclusion semble avoir un chemin complet (c'est-à-dire /dir1/dir2/file3.txt). Mais, du point de vue de rsync, le chemin d'exclusion est toujours relatif et il sera traité comme dir1/dir2/file3.txt. Dans l'exemple ci-dessous, rsync recherchera dir1 sous le répertoire source (et non sous / répertoire racine).
$ rsync -avz --exclude '/dir1/dir2/file3.txt' source/ destination/
Ainsi, la commande ci-dessus est exactement la même que la suivante. Juste pour éviter toute confusion (et pour faciliter la lecture), ne donnez pas / devant le chemin d'exclusion.
$ rsync -avz --exclude 'dir1/dir2/file3.txt' source/ destination/
5. Exclure un type de fichier spécifique
Pour exclure un type de fichier spécifique qui a une extension spécifique, utilisez le modèle approprié. Par exemple, pour exclure tous les fichiers contenant l'extension .txt, procédez comme suit.
$ rsync -avz --exclude '*.txt' source/ destination/ building file list ... done created directory destination ./ dir1/ dir1/dir2/ dir3/
Vérifiez le répertoire de destination pour vous assurer qu'il n'a pas copié les fichiers *.txt.
$ find destination destination destination/dir1 destination/dir1/dir2 destination/dir3
Remarque : Ce qui précède est très utile lorsque vous souhaitez sauvegarder votre répertoire personnel, mais excluez tous ces énormes fichiers image et vidéo qui ont une extension de fichier spécifique.
6. Exclure plusieurs fichiers et répertoires en même temps
Lorsque vous souhaitez exclure plusieurs fichiers et répertoires, vous pouvez toujours spécifier plusieurs options d'exclusion rsync dans la ligne de commande, comme indiqué ci-dessous.
$ rsync -avz --exclude file1.txt --exclude dir3/file4.txt source/ destination/
Attendre. Et si j'avais des tonnes de fichiers que je voulais exclure de rsync ?
Je ne peux pas continuer à les ajouter dans la ligne de commande en utilisant plusieurs exclusions, ce qui est difficile à lire et difficile à réutiliser la commande rsync pour plus tard.
Donc, la meilleure façon est d'utiliser l'option rsync –exclude-from comme indiqué ci-dessous, où vous pouvez lister tous les fichiers (et répertoires) que vous souhaitez exclure dans un fichier.
Tout d'abord, créez un fichier texte avec une liste de tous les fichiers et répertoires que vous ne souhaitez pas sauvegarder. Il s'agit de la liste des fichiers et répertoires que vous souhaitez exclure du rsync.
$ vim exclude-list.txt file1.txt dir3/file4.txt
Ensuite, exécutez le rsync en utilisant l'option –exclude-from avec le fichier exclude-list.txt comme indiqué ci-dessous.
$ rm -rf destination $ rsync -avz --exclude-from 'exclude-list.txt' source/ destination/ building file list ... done created directory destination ./ file2.txt dir1/ dir1/dir2/ dir1/dir2/file3.txt dir3/
Vérifiez le répertoire de destination pour vous assurer que les fichiers et répertoires répertoriés dans le fichier exclude-list.txt ne sont pas sauvegardés.
$ find destination destination destination/file2.txt destination/dir1 destination/dir1/dir2 destination/dir1/dir2/file3.txt destination/dir3