15 votes

Inclusions/exclusions complexes avec rsync

J'essaie de comprendre la syntaxe du filtre rsync pour effectuer des inclusions/exclusions complexes, et j'essaie d'obtenir ce qui suit :

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

J'ai essayé de nombreuses variantes de la syntaxe du filtre, et malgré la lecture répétée de la page de manuel, je n'arrive pas à obtenir ce genre d'effet. Les filtres Rsync semblent être très puissants, et j'ai du mal à croire qu'ils ne puissent pas gérer un scénario courant comme celui-ci.

20voto

Roy Rico Points 5558

Vous devez inclure tous les répertoires parents jusqu'au répertoire souhaité avant d'utiliser la règle d'exclusion.

Par exemple, j'utilise ce qui suit dans un script de sauvegarde :

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

Dans votre cas, vous auriez donc besoin de quelque chose comme ce qui suit :

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST

0 votes

Excellent. Ça m'a pris du temps.

0 votes

D'une certaine manière, quand je lis le man rsync j'ai mal compris l'ordre correct pour mélanger les inclusions et les exclusions. Il m'a fallu une heure pour le comprendre...

6voto

jason saldo Points 5036

Sur la ligne de commande :

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

Retirer --dry-run pour le rendre fonctionnel, remplacez "DEST" par votre destination et ajoutez l'utilisateur et l'hôte à la source "/" si nécessaire.

À partir d'un fichier de règles :

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

où le contenu de /etc/rsync/somerules.rules pourrait être :

+/ /home/user1
-/ /home/*

Vous devez les tester et il se peut que vous deviez faire quelques ajustements, mais cela devrait vous permettre de commencer.

0 votes

OK, cela fonctionne. J'ai un cas plus complexe que j'ai ajouté à la question. L'inclusion supplémentaire ne fonctionne pas avec le scénario du sous-répertoire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X