GNU/Linux >> Tutoriels Linux >  >> Linux

6 exemples rsync pour exclure plusieurs fichiers et répertoires à l'aide de l'exclusion de

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

Linux
  1. Comment chiffrer et déchiffrer des fichiers et des répertoires à l'aide de Tar et OpenSSL

  2. Comment compresser des fichiers et des répertoires sous Linux (avec exemples)

  3. CloudCross – Synchroniser les fichiers et les répertoires avec plusieurs stockages cloud

  4. Utiliser rsync pour synchroniser les fichiers

  5. Comment copier des répertoires de manière récursive à l'aide de rsync tout en excluant des fichiers spécifiques

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

Comment supprimer des fichiers et des répertoires à l'aide du terminal dans Debian 10

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux