Comment exclure des fichiers dans rsync?

12

J'utilise le serveur Ubuntu 12.04, maintenant je veux sauvegarder certains fichiers en utilisant rsync, voici un essai:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Comme vous pouvez le voir, je veux sauvegarder tous les fichiers du dossier $ HOME / Documents dans le dossier $ HOME / Backups / TEST , mais exclure les fichiers du dossier autre et temp . Mais j'ai échoué, rsync a quand même copié les fichiers dans les deux dossiers exclus:

ls $HOME/Backups/TEST/another
test

test est un fichier dans le dossier un autre , et il est également copié bien que j'exclue le fichier dans rsync, pourquoi? Comment laisser ces fichiers être réellement exclus?

Searene
la source

Réponses:

11

Il y a plusieurs problèmes avec votre commande rsync (voir aussi la page de manuel de rsync pour une explication détaillée des règles de filtrage).

  • nous avons besoin d'une --excludecommande pour chaque modèle donné.
  • les chemins donnés doivent être relatifs au chemin source (pas de chemins absolus).
  • des options doivent être données avant d'indiquer la source et la destination.

Pour votre exemple, la syntaxe suivante fonctionnera:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Notez que si un modèle d'exclusion se termine par, /il fait référence à un répertoire. Si vous omettez les deux, les fichiers et répertoires portant ce nom seront exclus. Remplacez-le par un caractère générique *pour exclure tous les fichiers ou répertoires avec cette chaîne dans leurs noms.

Takkat
la source
6
Ce n'est pas tout à fait correct. Je ne sais pas comment cela fonctionne, mais de l'expérimentation, --exclude=/fooexclura le répertoire foodirectement dans la source, mais --exclude=fooexclura tous les répertoires nommés foo, même dans les sous-répertoires.
Sparhawk
10

Vous pouvez trouver plus facile d'ajouter des .rsync-filterfichiers dans vos répertoires sources et d'utiliser l' -Foption.

Depuis la page de manuel:

-F: L'option -F est un raccourci [...] pour cette règle:

 --filter='dir-merge /.rsync-filter'

Cela indique à rsync de rechercher les fichiers .rsync-filter par répertoire qui ont été dispersés dans la hiérarchie et d'utiliser leurs règles pour filtrer les fichiers dans le transfert.

Par exemple: dans $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Au lieu de -, vous pouvez également écrire le mot entier exclude.

Maintenant vous pouvez

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
mivk
la source