rsync: Comment exclure les fichiers Dot uniquement dans le répertoire le plus haut?


8

Lorsque j'effectue des sauvegardes sous Bash avec rsync, j'essaie d'exclure tous les fichiers dot et les répertoires cachés du répertoire supérieur, mais pas ceux des répertoires autrement ciblés. Par exemple:

/copyme.c  
/.dontcopythisfile  
/.dontcopythisdirectory/or_its_contents  
/directory/.butcopymetoo

rsync -a --include=".includeme" --exclude=".*" . DESTne parvient pas à copier les fichiers de points souhaités dans les sous-répertoires, mais des variantes telles que --exclude="./.*"également échouent.

Suggestions? Cela nécessite-t-il une règle de filtrage par opposition à la plus simple --exclude?

regex  bash  rsync 

Réponses:


12

Vous devez utiliser l'ancre, et dans rsync, le caractère d'ancrage est '/'.

Donc, dans votre chaîne devrait être:

rsync -a --include="/.includeme" --exclude="/.*" ./ DEST

0

Je préfère généralement créer des fichiers de filtre .rsync contenant les modèles:

- /.*

De cette façon,

rsync -hxDPavilyzHFF --stats --delete ./ remote:/backup/

est la commande de sauvegarde idéale. Le filtrage est effectué par les drapeaux -FF.

Notez qu'en utilisant cette méthode, vous pouvez avoir différents fichiers .rsync-filter dans différents sous-répertoires, en les appliquant à leurs sous-arborescences respectives. Vous pouvez également remplacer les exclusions dans les sous-répertoires à l'aide de cette méthode.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.