web-dev-qa-db-fra.com

Comment exclure des fichiers dans rsync?

J'utilise le serveur Ubuntu 12.04, maintenant je veux sauvegarder des 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 constater, je souhaite sauvegarder tous les fichiers du dossier $ HOME/Documents dans un dossier $ HOME/Sauvegardes/TEST , mais exclure fichiers du dossier n autre = et temp. Mais j'ai échoué, rsync a quand même copié les fichiers des deux dossiers exclus:

ls $HOME/Backups/TEST/another
test

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

12
Searene

Votre commande rsync pose plusieurs problèmes (voir également page de manuel de rsync pour une explication détaillée des règles de filtrage).

  • nous avons besoin d’une commande --exclude 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 que nous indiquions 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 l'omettez, les fichiers et les 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.

11
Takkat

Vous trouverez peut-être plus facile d’ajouter des fichiers .rsync-filter dans vos répertoires source et d’utiliser l’option -F.

De 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 éparpillés dans la hiérarchie et d'utiliser leurs règles pour filtrer les fichiers du 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 excludename__.

Maintenant vous pouvez

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
10
mivk