rsync exclure un répertoire, mais inclure un sous-répertoire
Je suis en train de copier un projet pour mon serveur avec rsync.
J'ai un projet précis de scripts d'installation dans un sous-répertoire
projet/specs/installer/projet1
Ce que j'essaie de faire est d'exclure tout ce qui dans le projet/specs répertoire, mais le projet spécifique répertoire d'installation: projet/specs/installer/projet1.
rsync -avz --delete --include=specs/install/project1 \
--exclude=specs/* /srv/http/projects/project/ \
user@server.com:~/projects/project
Mais comme cela le contenu des spécifications répertoire se fait exclure, mais l'installation/projet1 répertoire ne sont pas inclus.
J'ai tout essayé mais je ne semblent tout simplement pas obtenir que cela fonctionne
- Viens de trouver une question similaire sur linuxquestions.org qui peut aider: linuxquestions.org/questions/linux-software-2/...
- Je vous remercie, que résolu! Rsync a vraiment une logique étrange parfois.
- Les doublons stackoverflow.com/questions/7960669/...
- L'ordre de --include et --exclude question? Mise à JOUR: je viens de répondre à ma propre question: il importe. Je ne peux pas le faire fonctionner avec --exclude avant --comprendre, mais il fonctionne avec --include avant --exclude.
Vous devez vous connecter pour publier un commentaire.
Parfois, il est juste un détail.
Il suffit de changer votre modèle en ajoutant une fin /à la fin de l'inclure modèle et ça marchera:
Ou, en alternative, de préparer un filtre de fichier comme ceci:
Puis utiliser l'option --option de filtre:
Pour plus d'info rendez-vous à la section RÈGLES de filtrage dans le rsync(1) page de manuel.
L'autre solution est de ne pas travailler ici.
Fiable
Vous n'avez pas le choix mais pour descendre manuellement pour chaque niveau de votre sous-répertoire. Il n'y a pas de risque pour inclure les fichiers indésirables, comme rsync n'inclut pas les fichiers des répertoires inclus.
1) Créer un filtre inclure de fichier, par exemple "include_filter.txt":
2) Exécuter:
Moyen facile
Vous pouvez commencer vos filtres "*/", ce qui rsync pour descendre tous les sous-niveaux. C'est pratique mais:
1) Créer un filtre inclure de fichier, par exemple "include_filter.txt":
2) Exécuter:
Note l'ajout de l'option -m.
Afin de
--include
et--exclude
affecte ce qui est inclus ou exclu.Quand il y a des sous-répertoires particuliers à inclure besoin de les placer en premier.
Poste similaire disponible ici.