Page 1 sur 1

[rsync] du bon usage de --filter (résolu)

Publié : jeu. 16 mai 2013, 20:11
par sztruks
Bonjour,


J’essaie desespérément d’exclure des fichiers d’une synchronisation avec rsync, mais visiblement je n’ai pas bien compris le manuel et les quelques post que j’ai pu lire…
Toutes mes tentatives pour inclure ou exclure des fichiers se soldent par des échecs, rsync me transfère tout avec obstination.
Par exemple si je fais un

Code : Tout sélectionner

 rsync --filter="+ png" cours/* /tmp 
Tous mes fichiers sont transférés, même chose si je tente d’exclure le png avec un --filter="- png". Les options include, include-from et exclude ne fonctionnent pas mieux.
Par contre, si j’oublie l’espace et écris "+png", j’ai bien un message d’erreur…

J’ai dû mal comprendre quelque chose dans le man, qui est assez complexe, mais quoi?

Merci d’avance pour toute piste!

Re: [rsync] du bon usage de --filter

Publié : jeu. 16 mai 2013, 21:54
par alban
Salut,

En fait rsync pour son filtre cherche une correspondance sur le nom du fichier complet (dans ce cas un fichier qui s'appelerait "png"), sauf si le pattern contient une wildcard (*, ? ou [ d'après le man). Dans ton cas un

Code : Tout sélectionner

rsync --filter "- *png"
ou

Code : Tout sélectionner

rsync --filter "- **png"
devrait mieux marcher (j'avoue ne pas bien voir la différence, et n'avoir jamais eu besoin de la creuser pour le peu d'usage que j'ai eu de exclude).

Re: [rsync] du bon usage de --filter (résolu)

Publié : jeu. 16 mai 2013, 22:57
par sztruks
Merci pour ta réponse, j’avais mal interprêté la portion de manuel, j’avais compris que rsync faisait l’équivalent d’une recherche en regexp de type png$ (confusion à la lecture de ^ et $)…

Il y a visiblement un autre truc retors, c’est que dans ma formule, en demandant un rsync sur *, seuls les filtres négatifs font leur effet — c’est ce qui ressort d’un -vv. Le filtre positif n’est pas interprêté comme ne faire les transferts que sur un fichier.

Re: [rsync] du bon usage de --filter (résolu)

Publié : ven. 17 mai 2013, 18:03
par jean_no
Salut

tu peux auusi créer un fichier no_save contenant par ex:

Code : Tout sélectionner

#"- foo/" would exclude any directory named foo
#"- *.o" would exclude all names matching *.o
- *.*~
- *~
- *.old
- *.png
et appeler rsync comme ceci :

Code : Tout sélectionner

rsync ... --exclude-from=/home/tonuser/no_save ... 
A+