J'essaie de comprendre le système de filtrage rsync, mais je suis complètement déconcerté.
J'ai la structure de répertoire "test" suivante pour essayer d'y voir plus clair. Sans options de filtrage, voici tous mes fichiers :
rsync -amv --dry-run /source /target
building file list ... done
source/
source/1.pdf
source/2.pdf
source/exclude_rules.txt
source/filter_rules.txt
source/excludedir/
source/excludedir/2.jpg
source/excludedir/4.pdf
source/subdir/
source/subdir/1.jpg
source/subdir/1.txt
source/subdir/3.pdf
source/subdir/subdir2/
source/subdir/subdir2/6.jpg
source/subdir/subdir2/6.pdf
Je veux juste synchroniser tous *.pdf
sauf dans certains répertoires, à savoir tout répertoire qui a *exclude*
en elle.
J'utilise un fichier contenant les règles de filtrage avec la commande suivante :
rsync -amv --dry-run --filter='merge /filter_rules' /source /target
Les règles de filtrage ressemblent à des variations de ce qui suit, mais je n'arrive pas à les faire produire les résultats que je recherche :
-/ *exclude*/
+/ *.pdf
-/ *
Ce que j'ai trouvé de mieux, c'est l'exclusion simple :
-/ *exclude*/
Ce qui donne :
building file list ... done
source/
source/1.pdf
source/2.pdf
source/exclude_rules.txt
source/filter_rules.txt
source/subdir/
source/subdir/1.jpg
source/subdir/1.txt
source/subdir/3.pdf
source/subdir/subdir2/
source/subdir/subdir2/6.jpg
source/subdir/subdir2/6.pdf
Comment je filtre le reste pour n'avoir que *.pdf
?