Le paramètre exclude de rsync

Rien de tel qu’une belle commande rsync de trois kilomètres de long pour faire ses backups… excepté quand on veut exclure certains dossiers et que ça ne fonctionne pas. Et qu’on perd une heure à s’arracher les cheveux avant de comprendre pourquoi. Voici un exemple (factice) erroné:

rsync --archive --verbose --stats --progress --delete --delete-excluded --exclude="/home/jeff/src/" /home/jeff/ /media/backup/

On pourrait croire, selon le gros-bon-sens, que ceci est syntaxiquement correct. D’ailleurs, le manpage de rsync ne dit rien à ce sujet. Après une heure de tâtonnement, j’ai eu le insight par rapport à la raison pourquoi cet idiot de rsync continuait de backuper le dossier «src» quand même: la racine (“/”) est relative au dossier racine qu’on backupe. Ainsi, si je backupe “/home/jeff/”, “/” ne correspond pas réellement à “/”, mais à “/home/jeff/”. Conséquemment, si je veux exclure “/home/jeff/src”, il faut que je lui dise d’exclure “/src” plutôt.

Allez, geeks barbus, dites-moi que c’est parfaitement naturel et logique et que j’aurais dû le deviner immédiatement :)

…en fait, ce n’est pas tout. Je découvre en rédigeant ces lignes que rsync a, en plus, deux «modes» d’opération, dépendamment de si on met un “/” à la fin du chemin de dossier source ou pas. Tiré du manuel:

A trailing slash on the source changes this behavior to transfer all files from the directory src/bar on the machine foo into the /data/tmp/.

A trailing / on a source name means “copy the contents of this directory”.
Without a trailing slash it means “copy the directory”.

Jeff

Branding strategist and business developer, free & open-source software UX designer and experienced community manager. Has unlimited hi-HP potions to keep teammates alive.

You can check out my main website or find me on G+ or Twitter.

5 Replies to “Le paramètre exclude de rsync”

  1. Hello,

    Oui oui en effet le paramètre –exclude exclue un “masque” et non un chemin donc le hic c’est que si un autre rep porte ce nom dans l’arborescence et quelque soit sa profondeur, il sera exclu aussi vu qu’il correspondra à ce masque :(

    Sinon un –filter=”- /home/jeff/src/” spécifie bien un chemin.

    Concernant le / final, “rsync -av /foo…” copie /foo même si il doit le crée lui même sur la cible, alors que “rsync -av /foo/…” ne prendra que le contenu de /foo, idem à un /foo/* en fait.

  2. Merci, j’avais le même soucis, mais je n’avais pas cherché à le résoudre. Est ce que tu as contacter les dev pour modifier la doc ?

    François.

Comments are closed.