# Rsync: exclure une arborescence sauf un sous-répertoire

**URL:** <https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288>\
**Category:** Support Debian\
**Created:** [Juin 27, 2025, 9:45 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288 "2025-06-27T09:45:22Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juin 27, 2025, 9:45 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/1 "2025-06-27T09:45:22Z")

</div>

Bonjour,

malgré la lecture et relecture des règles d’exclusion/inclusion et de nombreux tests avec «+», «-», «–exclude-from», «–include-from» dans diverses combinaisons, je ne parviens pas à obtenir que  
rsync exclut de la sauvergarde le répertoire /dir1/ sauf son sous-répertoire /dir1/subdir3/,  
dans cet exemple:  
source:

```
/dir1/subdir1/
/dir1/subdir2/
/dir1/subdir3/
/dir2/subdir21/
/dir2/dubdir22/

```

cible attendue:

```
/dir1/subdir3/
/dir2/subdir21/
/dir2/dubdir22/

```

Quel est donc la syntaxe pour obtenir ce résultat (dans un script)?

Par exemple dans une commande:  
`rsync -au --exclude-from=exclude.txt source/ cible/`

---

<div class="post-metadata">

**Author:** ![fech](https://www.debian-fr.org/user_avatar/www.debian-fr.org/fech/32/10523_2.png) [@fech](https://www.debian-fr.org/u/fech)\
**Post date:** [Juin 27, 2025, 9:57 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/2 "2025-06-27T09:57:45Z")

</div>

bonjour,

`rsync -av /repertoireDepart/ /repertoireArrivee/ --exclude="repertoireExclu"`

mettre autant d’exclude que necessaire

Cdt

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juin 27, 2025, 10:05 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/3 "2025-06-27T10:05:51Z")

</div>

Merci fech,  
mettre autant d’exclus que nécessaire, c’est ce que je fais depuis longtemps.  
L’idée était simplement de raccourcir le fichier exclude.file ou de l’associer à --include-file, par exemple (ou -include) afin d’oublier les nouveaux sous-répertoires nouvellement créés, et qui n’ont pas à être sauvegardés.

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Juin 27, 2025, 11:53 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/4 "2025-06-27T11:53:07Z")

</div>

salut  
j’ai réussi en mettant l’exclude en relatif  
**exclude=bb/a1/c1**  
`cd /tmp/aa; /usr/bin/rsync -r -t -p -o -g -v --progress --delete -l -s --exclude=bb/a1/c1 --include=/tmp/aa/bb/a1/* /tmp/aa/bb /tmp/aa/cc/` : **le dossier /tmp/aa/bb/a1/c1 n’est pas copié** ; le dossier /tmp/aa/bb/a1/c2 est copié

**exclude=/tmp/aa/bb/a1/c1**  
`/usr/bin/rsync -r -t -p -o -g -v --progress --delete -l -s --exclude=/tmp/aa/bb/a1/c1 --include=/tmp/aa/bb/a1/* /tmp/aa/bb /tmp/aa/cc/` : **le dossier /tmp/aa/bb/a1/c1 est quand même copié** ; le dossier /tmp/aa/bb/a1/c2 est copié

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juin 27, 2025, 12:16 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/5 "2025-06-27T12:16:15Z")

</div>

Merci dindoun,  
mais ( si je comprends bien ) cela revient encore à exclure 1 par 1 les sous-répertoires de `/a1/` (ici `/a1/c1/` seulement) pour ne laisser que `a1/c2/` hors des exclusions.  
Ma question est l’inverse: comment tout exclure de `/a1/` (`/a1/c1/, /a1/c3, /a1/c4` etc.) _en indiquant seulement d’exclure le répertoire racine_ (`/a1/`), et copier quand-même 1 répertoire (ici /a1/c2).  
Il s’agirait juste d’éviter d’ établir la liste des sous-répertoires de `/a1/` à exclure.

J’espérais qu’en ajoutant un «include» (`/a1/c2/`) avant ou après la commande «exclude» (`/a1/`), cette solution fonctionnerait, mais je n’ai pas réussi.  
Bien entendu, ces directives doivent se trouver dans un fichier du type `--exclude-from` ou `--files-from`

---

<div class="post-metadata">

**Author:** ![PmGs](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/dfb087/32.png) [@PmGs](https://www.debian-fr.org/u/PmGs)\
**Post date:** [Juin 27, 2025, 8:14 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/6 "2025-06-27T20:14:16Z")

</div>

> [@josephtux](#):
>
> Quel est donc la syntaxe pour obtenir ce résultat (dans un script)?

Si c’est dans un script, tu crées 2 rsync et tu ne te casses pas la tête …

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Juin 27, 2025, 8:16 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/7 "2025-06-27T20:16:59Z")

</div>

ok j’ai compris :  
l’idée est d’autoriser les dossiers et d’exclure les sous-dossiers et de tout passer par filter

je mets tes dossiers dans /tmp/aa/ , je copie dans /tmp/bb/

- premier essai :  
`rsync -aA -H --numeric-ids -v --progress --delete --filter="merge /tmp/merge.txt" /tmp/aa/ /tmp/bb/`  
avec merge.txt :

```auto
+ dir1/
+ dir2/
- dir1/subdir1/
- dir1/subdir2/

```

`$ find /tmp/bb/* -mindepth 1 |sed 's#/tmp/bb/##'`  
dir1/subdir3  
dir2/subdir21  
dir2/dubdir22

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juin 28, 2025, 11:21 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/8 "2025-06-28T11:21:50Z")

</div>

> [@PmGs](#):
>
> tu ne te casses pas la tête

effectivement, il faux être pratique.  
mais c’est ma tendance Shadock à penser compliqué ce qui peut aisément se contourner.  
Merci pour ce paradoxe métaphorique: me faire toucher le sol en m’allégeant.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juin 28, 2025, 11:29 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/9 "2025-06-28T11:29:57Z")

</div>

> [@dindoun](#):
>
> l’idée est d’autoriser les dossiers et d’exclure les sous-dossiers

non, l’idée est d’interdire un dossier avec tous ses sous-dossiers, sauf un, afin de n’avoir pas à tous les lister sauf un.

Ici encore, il faut lister…

Mais la solution pratique est effectivement de ne pas se casser la tête en faisant simplement 2 rsync:

- dans le premier on exclut tout
- dans le deuxième on ne copie que le sous-dossier choisi.

Merci pour vos efforts

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Juin 28, 2025, 9:09 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/10 "2025-06-28T21:09:53Z")

</div>

peut être avec  
`+ /machin`  
`- /machin`  
`+ /machin/truc`  
mais j’ai la flemme d’essayer

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Juin 28, 2025, 9:14 UTC](https://www.debian-fr.org/t/rsync-exclure-une-arborescence-sauf-un-sous-repertoire/91288/11 "2025-06-28T21:14:37Z")

</div>

> [@dindoun](#):
>
> mais j’ai la flemme d’essayer

oui, il est temps de renoncer: trop casse-tête c’est aussi trop périlleux, et la solution pratique est simple, comme l’a souligné PmGs.

encore merci à tous
