127 votes

Comment rsynchroniser uniquement une liste spécifique de fichiers ?

J'ai une cinquantaine de fichiers dans divers sous-répertoires que j'aimerais pousser vers un serveur distant. Je pensais que rsync pourrait le faire pour moi en utilisant l'option --include-from. Sans l'option --exclude="*", tous les fichiers du répertoire sont synchronisés, avec l'option, aucun fichier ne l'est.

rsync -avP -e ssh --include-from=deploy/rsync_include.txt --exclude=* ./ root@0.0.0.0:/var/www/ --dry-run

Je l'exécute en mode sec au départ et 0.0.0.0 est évidemment remplacé par l'IP du serveur distant. Le contenu de rsync_include.txt est une nouvelle liste de chemins relatifs aux fichiers que je veux télécharger, séparés par des lignes.

Y a-t-il une meilleure façon de procéder qui m'échappe en ce lundi matin ?

3voto

sopel Points 61

J'ai eu une tâche similaire : rsync tous les fichiers modifiés après une date donnée, mais en excluant certains répertoires. Il était difficile de construire une solution tout-en-un, j'ai donc divisé le problème en petits morceaux. Solution finale :

find  ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS" | egrep -v "/\..|Downloads|FOO" > FileList.txt
rsync -v --files-from=FileList.txt ~/sourceDIR /Destination

J'utilise d'abord find -L ~/sourceDIR -type f -newermt "DD MMM YYYY HH:MM:SS" . J'ai essayé d'ajouter regex a find pour exclure les modèles de noms, mais ma version de Linux (Mint) ne semble pas comprendre la négation des regex dans les lignes find . J'ai essayé un certain nombre d'expressions rationnelles, mais aucune ne fonctionne comme souhaité. Je me retrouve donc avec egrep -v - option qui exclut le modèle facile. Mon rsync ne copie pas les répertoires comme /.cache o /.config plus quelques autres que j'ai explicitement nommés.

3voto

Theodore R. Smith Points 4410

Aucune de ces réponses n'a fonctionné pour moi, quand tout ce que j'avais était un liste de répertoires . Puis je suis tombée sur la solution ! Vous devez ajouter -r a --files-from parce que -a ne sera pas récursif dans ce scénario (qui l'aurait cru ? !).

rsync -aruRP --files-from=directory.list . ../new/location

2voto

Matthias Points 185

Cette réponse n'est pas la réponse directe à la question. Mais elle devrait vous aider à déterminer la solution la mieux adaptée à votre problème.

Lorsque vous analysez le problème, vous devez activer l'option de débogage. -vv

Ensuite, rsync affichera quels fichiers sont inclus ou exclus par quel motif :

building file list ... 
[sender] hiding file FILE1 because of pattern FILE1*
[sender] showing file FILE2 because of pattern *

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X